programing

JS 파일 내 PHP 상수

telebox 2023. 10. 14. 10:04
반응형

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

반응형