【发布时间】:2012-03-30 14:50:06
【问题描述】:
我遇到了一个我无法理解的问题。
在插件开发过程中,我包含了一个 file.js.php(注册/入队)。
<?
/*
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 CONSTANTS 可以工作,但是任何 WP CONSTANT 都将不可用。
这包括在 plugin.php 中声明的 MY OWN 常量(实际上这就是我什至开始测试 WP 常量的原因)
很有趣 - 不仅 CONSTANTS 不可用 - 而且任何 wp 函数都返回“不可用”。
PHP 常量旨在始终通过应用程序可用。 这是 WP 特有的问题吗?这是故意的吗?还是我做错了什么?
注意:我知道还有其他方法可以做到这一点(比如使用 localize_script 将变量传递给 JS - 或者只是使用函数在标题中输出路径) - 但首先 - 这些方法对我来说并不理想 - 更重要的是我想了解为什么这种方法会失败......
编辑我:
尽管@Matt Beckman 指出了正确的方向,但他的具体方法不起作用。 确实必须包含来自 WP 的文件。 对我来说,以下两项工作:
include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php');
您可以想象两者是相等的-但问题仍然存在:建议使用硬编码(如@Salman A)-如果插件的目录发生变化怎么办?这种情况下的解决方案是什么?
请注意,wp-load.php 和 wp-config.php 都为我工作。我不知道哪个更好,或者哪个会带来一些安全问题。
但我想这是另一个问题..
底线:这个解决方案只是 TEMP,直到我找到正确的答案。我的插件是通过 WORDPRESS 插件机制加载的(enqueue_script() / register_script() / init() etc..) - 因此我无法理解它为什么这样做.. 但现在它的工作原理如上所述。
【问题讨论】:
-
在您的应用程序中引用 wordpress 函数/常量之前,您不需要
include或require一些文件吗? -
好问题..正是我想知道的。如果是这样 - 哪些??
标签: php javascript constants wordpress