我面臨一個我無法理解的問題。JS文件裏面的PHP常量
在插件開發過程中,我包含一個file.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.. "
所以我的測試表明我說,魔術常量工作,但任何WP常數將不可用。
這包括在plugin.php(實際上這就是爲什麼我甚至開始測試WP常數的原因)
足夠有趣的是宣稱我自己的常量 - 不僅常量是不可用的 - 但任何WP功能正在返回「不可用」。
PHP常量是通過應用程序在任何時候都可用。 這是一個WP特定的問題?那是故意的嗎?還是我做錯了什麼?
注:我知道有其他的方法來做到這一點(如使用localize_script將變量傳遞給JS - 或者只是用一個函數來輸出頭中的路徑) - 但首先 - 這些方法都不理想對我來說 - 更重要的是,我想知道爲什麼這種方法失敗...
編輯我:
Althouh @馬特貝克曼在正確的方向指出了具體的方法沒有奏效。 確實必須包含來自WP的文件。 對我來說,這兩個以下工作:
include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname (__FILE__))))).'/wp-load.php');
兩個,你可以想像是相等的 - 但問題仍然存在:這些都有點硬編碼(如@Salman A)建議 - 什麼如果plugin's目錄的變化?這種情況下的解決方案是什麼?
請注意,wp-load.php
和wp-config.php
都適合我。我不知道什麼更好,哪些可能會帶來一些安全問題。
,但我想這是另外一個問題..
底線:這個解決方案是,直到我會找到正確的答案只有TEMP。我的插件通過WORDPRESS插件mechanisem(enqueue_script()/ register_script()/ init()等)加載 - 因此我無法理解它爲什麼這樣做。現在它工作如上所述。
難道你需要'包括'或'需要'一些文件,然後才能在你的應用中引用wordpress函數/常量? – 2012-03-14 06:42:17
好問題..正是我想知道的。如果是的話 - 哪些? – 2012-03-14 06:44:32
這會幫助你。 - http://codeblow.com/questions/php-within-js-file-wordpress/ - http://stackoverflow.com/questions/6260902/how-to-pass-variable-from-php-template-to- javascript - http://stackoverflow.com/questions/6401297/php-constants-in-a-javascript-file - http://stackoverflow.com/questions/6808221/php-within-js-file-wordpress – Milap 2012-03-14 06:34:13