WordPress plugins_url()函数无法在共享主机上运行

时间:2013-01-18 02:27:23

标签: php wordpress

我构建的网站使用高级自定义字段插件,一切都适用于我自己的网络主机上的localhost。不幸的是,当我将网站移动到客户购买的托管(GoDaddy共享托管)时,高级自定义字段插件的JavaScript和CSS文件无法正确加载。检查源,问题很明显 - 它们指向以下路径:

http://www.clientsamazingwebsite.com/wp-content/plugins/home/content/06/10145906/html/wp-content/plugins/advanced-custom-fields/js/input-actions.js?ver=3.5.7.2

(如果仔细观察,可以看到有关服务器上文件实际路径的引用,而不是URL)

我已将问题追溯到插件中的以下行:

$this->dir = plugins_url('',__FILE__);

应该返回/wp-content/plugins/advanced-custom-fields

而是返回/wp-content/plugins/home/content/06/10145906/html/wp-content/plugins/advanced-custom-fields

我已经编辑了插件文件,使其指向正确的路径,但每次更新插件时这些更改都会恢复,因此这不是长期解决方案。

我看到有些人抱怨__FILE__魔术常量与符号链接无法正常工作,但我当然没有创建任何符号链接。这是使用GoDaddy的限制吗?

更新

我注意到__FILE__在GoDaddy上返回的内容与本地计算机或其他Web服务器上的内容不同。一个是两个工作机器,它从文件系统的根目录返回完整路径(即/srv/www/sitename/public_html/file.php),而在GoDaddy上,它返回的路径从主目录(/home/content/06/10145906/html/file.php)开始。

这可能是问题吗?

5 个答案:

答案 0 :(得分:3)

根据Wordpress Codex

You can either specify the $path argument as a hardcoded path relative to the
plugins directory, or conveniently pass __FILE__ as the second argument to make
the $path relative to the parent directory of the current PHP script file.

所以使用

plugins_url( basename( __DIR__ ) . '/path/to/plugin/asset.js' );

而不是

plugins_url( '/path/to/plugin/asset.js', __FILE__ );

对我来说是可接受的解决方法。也许不像指定__FILE__那样敏捷。

答案 1 :(得分:1)

您可以尝试:

$this->dir = dirname(__FILE__);

如果您正在运行较新的PHP版本,请使用

$this->dir = __DIR__;

答案 2 :(得分:0)

由于您的服务器移动,我预计会出现这种情况。

检查您的WordPress设置页面,确保WordPress网址在移动后反映新网址。

如果这一切都正确,那么有些东西会覆盖其中一个WordPress的常量,WP_PLUGIN_URL或用于设置它的前驱常量之一。寻找它的地方将在wp-config.php文件中。

答案 3 :(得分:0)

现在这可能与PHP有关(它与旧版本不一样)总是返回__FILE__的“物理”地址,忽略任何符号链接等等。上帝知道(和PHP开发人员)为什么没有在PHP上设置以改变这种行为,但是当WP将该路径与其上已注册的URL进行比较时,它会改变它返回URL的“rest”并返回完整路径的正常行为。

这基本上意味着只要Codex仍然建议开发人员使用__FILE__来创建加载库的URL路径,而其他方法不会破坏任何符号链接,WP和符号链接就不会很好。在磁盘级别。

答案 4 :(得分:0)

这可以解决您的问题:

define('WP_CONTENT_DIR', realpath($_SERVER['DOCUMENT_ROOT'] . '/wp-content'));