Plugins_url函数混合了系统路径和URL

时间:2013-08-04 作者:Benny Neugebauer

在我的WordPress小部件中,我使用以下代码:

wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ )));
不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:

http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/jquery-ui-1.9.2.widget.js?ver=3.6
这个问题是否与我在Windows计算机上(使用Apache 2)安装了本地WordPress有关?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

简短回答jquery-ui.widget 是WP中已包含和注册的标准脚本之一。您不需要注册它,只需排队即可dirname 内部功能plugin_url. 仅限离开__FILE__ 作为的第二个参数plugins_urljquery-ui.widget 是其中之一standard wordpress scripts 因此,在大多数情况下,您不必/不需要使用自己上传的文件,只需在wp安装中使用副本即可。

在这种情况下,您不需要注册脚本,因为它已经注册,您只需使用wp_enqueue_script(\'jquery-ui-widget\').

这将使Wordpress附带的脚本版本正确排队。在WP(3.6)的当前版本中,“jqueri ui小部件”位于“1.10.3”版本中。

这个版本有问题吗?尝试解决它们。。。另外,因为包含旧版本并不能保证不会有问题:如果另一个插件或主题包含同一脚本的WP版本,我很乐意想象会发生什么。

如果我们忘记了您正在尝试包含一个WP标准脚本,那么您的代码存在的问题位于plugins_url 作用

的第二个参数的文档plugins_urlcodex 不是我见过的最清晰的:

$plugin - 您希望$路径与哪个父目录相对的插件目录下的路径

如果我们需要传递目录路径(就像您一样)或完整路径(带文件名),则不够清楚。

但在我们阅读的同一法典页面中,下面几行是:plugins_url() 函数通常用于插件文件。通过__FILE__ PHP magic常量代替$plugin 参数使$path 相对于该文件的父目录

现在我们知道我们必须使用这样的函数:

wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', __FILE__ )); // without dirname( )
但请注意,要使此代码正常工作,它必须位于插件根目录中的文件中,所以最好的解决方案是将其放在主插件文件中。原因很简单:__FILE__ PHP magic常量始终包含写入文件的完整路径,即使该文件是必需的或包含在另一个文件中。因此,如果您将此代码放在插件内部目录中的文件中,它对作用域无效。

还要注意“assets/js/jquery-ui-1.9.2”。小部件。“js”必须相对于主插件文件,因此“assets”必须是插件根目录的一级子文件夹。

希望它能帮助你。

结束

相关推荐

Wp-plugins(必须使用Plugins)URL是否可以在unctions.php中使用?

wp插件(必须使用插件)URL是否可以作为在函数中使用的目标。php?我有一个mu函数。mu plugins文件夹中的php文件。一个函数调用javascript文件(alerts.js) 位于example.com/wp-content/mu-plugins/js/. 如何在我的函数中定位mu插件文件夹?目前,我正在使用get_site_url() . \'/wp-content/mu-plugins/js/alerts.js\',虽然与问题不完全相关,但这是用于调用javascript文件的完整函数: