访问管理页面时,我在控制台中遇到以下错误:
GET https://example/test/wp-content/plugins/home/account/public_html/wp-content/themes/mytheme-theme/inc/custom-script.js?ver=4.9.4 net::ERR_ABORTED
我已将错误跟踪到以下代码:
function theme_add_color_picker( $hook ) {
if( is_admin() ) {
wp_enqueue_style( \'wp-color-picker\' );
wp_enqueue_script( \'custom-script-handle\', plugins_url( \'custom-script.js\', __FILE__ ), array( \'wp-color-picker\' ), false, true );
wp_enqueue_script( \'admin-color-picker\', get_template_directory_uri() . \'/javascripts/admin/admin-color-picker.js\', array( \'jquery\' ) );
}
}
这里的问题是自定义脚本。js在/inc文件夹中不可用,而且根本不在主题文件夹中。但是颜色选择器工作得很好。如果我删除这行:
wp_enqueue_script( \'custom-script-handle\', plugins_url( \'custom-script.js\', __FILE__ ), array( \'wp-color-picker\' ), false, true );
它将停止一起工作。那么,我怎么会得到这个错误,但它仍然有效?
希望有一个干净的控制台日志。
编辑:
我改为:
wp_enqueue_script( \'wp-color-picker\' );
我收到以下错误:
Uncaught TypeError: $(...).wpColorPicker is not a function
at HTMLDocument.<anonymous> (admin-color-picker.js?ver=4.9.4:3)
at i (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at Object.fireWith [as resolveWith] (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at Function.ready (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
at HTMLDocument.K (load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils,jquery-ui-core,jquery-ui-widget,jquery-ui-mouse,jquery-ui-sortable,thickbox&ver=4.9.4:2)
最合适的回答,由SO网友:Jacob Peattie 整理而成
颜色选择器工作正常,因为它是一个单独的脚本,作为custom-script-handle
. 所以即使custom-script-handle
未加载,因为URL错误颜色选择器脚本仍将加载。
如果你不排队custom-script-handle
然后,颜色选择器将无法工作,因为脚本正在排队。您需要将其单独排队wp_enqueue_script( \'wp-color-picker\' );
原因custom-script-handle
本身没有加载,导致您看到的控制台错误是因为URL错误。URL错误的原因是您正在使用plugins_url()
不正确。特别是在你如何使用__FILE__
.
从…起the documentation, 的第二个参数plugins_url()
是:
插件或mu插件中文件的完整路径。URL将相对于其目录。通常通过传递来完成__FILE__
作为论据。
问题是在你的情况下__FILE__
在一个主题内。所以你的__FILE__
是:
/home/account/public_html/wp-content/themes/mytheme-theme/inc/{whatever-the-file-name-is}.php
但插件目录是:
/home/account/public_html/wp-content/plugins
WordPress已经知道插件文件夹的URL,
https://example/test/wp-content/plugins/
, 但需要使用这两条路径来找出您请求的特定文件的URL。那又怎样
plugins_url()
就是从第一条路径中减去第二条路径,尝试找出插件文件夹。
因此,如果正确使用,__FILE__
将类似于:
/home/account/public_html/wp-content/plugins/my-plugin/inc/assets.php
然后从中减去插件路径,得到:
my-plugin/inc/assets.php
plugins_url()
然后删除文件名:
my-plugin/inc
然后添加您在第一个参数中提供的文件名(
custom-script.js
):
/my-plugin/inc/custom-script.js
最后将其添加到插件URL中:
http://example.com/wp-content/plugins/my-plugin/inc/custom-script.js
但是自从你
__FILE__
不在插件文件夹中,没有重叠。因此,当它减去插件目录和文件名时,相对路径仍然是:
/home/account/public_html/wp-content/themes/mytheme-theme/inc/
然后,该文件和文件名被添加到插件URL中,您将得到以下结果:
https://example.com/wp-content/plugins/home/account/public_html/wp-content/themes/mytheme-theme/inc/custom-script.js
所以如果你需要你的主题排队
custom-script.js
, 您要么需要将其放入主题中,要么使用插件已经为其注册的句柄将其排队。不要尝试直接从主题内的插件加载文件。