我构建的网站使用高级自定义字段插件,一切都适用于我自己的网络主机上的localhost。不幸的是,当我将网站移动到客户购买的托管(GoDaddy共享托管)时,高级自定义字段插件的JavaScript和CSS文件无法正确加载。检查源,问题很明显 - 它们指向以下路径:
(如果仔细观察,可以看到有关服务器上文件实际路径的引用,而不是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
)开始。
这可能是问题吗?
答案 0 :(得分:3)
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'));