JS 파일 내 PHP 상수
저는 이해할 수 없는 문제에 직면해 있습니다.
플러그인 개발 중에 파일.js.php(register/enqueue)를 포함하고 있습니다.
<?
/*
File.js.php
*/
Header("content-type: application/javascript");
$path = constant('WP_PLUGIN_DIR'); //test with function
$path_2 = WP_PLUGIN_DIR; // test directly
//can cause a problem with older browsers?? use text/javascript
?>
//////////////////// Begin Tests ////////////
var templateDir = "<?php echo WP_PLUGIN_URL ?>" ;
var templateDir2 = "<?php echo $path ?>" ;
var templateDir3 = "<?php echo $path_2 ?>" ;
var templateDir4 = "<?php echo constant("WP_PLUGIN_URL") ?>";
var templateDir5 = "<?php echo __FILE__ ?>";
var templateDir6 = "<?php echo plugins_url( 'somedir/somefile.png' , dirname(__FILE__)) ?>";
결과:
var templateDir = "WP_PLUGIN_URL" ; // simply outputs a string of the constant name
var templateDir2 = "" ; // null or empty
var templateDir3 = "WP_PLUGIN_DIR" ;// simply outputs a string of the constant name
var templateDir4 = "//Warning: constant() Couldn't find constant WP_PLUGIN_URL in .."
var templateDir5 = "path.to.js.php" // only one that works ;
var templateDir6 = "Call to undefined function plugins_url() in.. "
그래서 나의 테스트는 MAGIC CONSTANCE가 작동한다는 것을 나에게 보여주었지만, 어떤 WP CONSTANCE도 사용할 수 없을 것입니다.
여기에는 plugin.php에서 선언된 MYOWN 상수가 포함됩니다. (사실 이것이 WP 상수를 테스트하기 시작한 이유이기도 합니다.)
흥미로운 점은 - CONSTANTs를 사용할 수 없을 뿐만 아니라 wp 함수도 "사용할 수 없음"으로 반환됩니다.
PHP 상수는 앱을 통해 상시 사용 가능하도록 되어 있습니다.그것이 WP의 특정한 문제입니까?의도적인 건가요? 아니면 제가 뭔가 잘못하고 있는 건가요?
참고: 변수를 JS에 전달하기 위해 localize_script를 사용하거나 헤더에 경로를 출력하기 위해 함수를 사용하는 것과 같은 다른 방법들이 있다는 것을 알고 있습니다. 그러나 첫째, 이러한 방법들은 저에게 이상적이지 않을 것입니다. 그리고 더 중요한 것은 이 방법이 왜 실패하고 있는지 이해하고 싶다는 사실입니다.
편집:
비록 @Matt Beckman은 그의 구체적인 방법이 효과가 없었다고 올바른 방향으로 지적했습니다.WP의 파일이 반드시 포함되어야 하는 것은 사실입니다.두 사람 모두에게 다음과 같은 일이 있습니다.
include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php');
상상할 수 있듯이 둘 다 동등합니다. 그러나 문제는 여전히 남아 있습니다. 이는 (@Salman A처럼) 제안된 다소 하드 코드화되어 있습니다. 플러그인의 dir가 변경되면 어떻게 합니까?그 경우 해결책은 무엇입니까?
참고로 둘 다wp-load.php
그리고.wp-config.php
저를 위해 일했습니다. 무엇이 더 좋은지, 어떤 것이 보안 문제를 일으킬 수 있는지 모르겠습니다.
하지만 다른 질문을 위해서라고 생각합니다.
결론: 이 솔루션은 정답을 찾을 때까지 TEMP만 사용합니다. 내 플러그인은 WORDPRESS 플러그인 메커니즘(enqueue_script() / register_script() / init() 등을 통해 로드되고 있습니다.) - 그래서 왜 그렇게 하는지 알 수가 없습니다.하지만 지금은 위와 같이 작동합니다.
이것이 자바스크립트처럼 포함되니, 당신의file.js.php
이 상수에 액세스하려면 워드프레스 라이브러리를 참조해야 합니다.현재 코드에는 해당 상수에 대한 참조가 없습니다.
__FILE__
워드프레스에서 아무것도 액세스할 필요가 없으므로 예상대로 작동합니다.
은 를 좀 할 입니다.require
아니면include
스 PHP에 .file.js.php
.
편집
파일.js.php 파일의 맨 위에 있는 다음을 사용하여 이러한 상수에 액세스합니다.
$home_dir = preg_replace('^wp-content/plugins/[a-z0-9\-/]+^', '', getcwd());
include($home_dir . 'wp-load.php');
언급URL : https://stackoverflow.com/questions/9696980/php-constant-inside-js-file
'programing' 카테고리의 다른 글
UIRepreshControl을 UIScrol View에서 사용할 수 있습니까? (0) | 2023.10.14 |
---|---|
Mysql, 긴/큰 데이터에서 넓은 데이터로 재구성 (0) | 2023.10.14 |
Swift ios는 ios9 및 ios10에서 원격 푸시 알림이 활성화되어 있는지 확인합니다. (0) | 2023.10.14 |
WooCommerce는 가격이 아닌 날짜로만 주문하는 것 같습니다. (0) | 2023.10.14 |
MySQL Server가 사라졌습니다(MariaDB - MEMORY Engine) (0) | 2023.10.14 |