控制台错误,即使一切正常?

时间:2018-03-08 作者:jockebq

访问管理页面时,我在控制台中遇到以下错误:

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)

1 个回复
最合适的回答,由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, 您要么需要将其放入主题中,要么使用插件已经为其注册的句柄将其排队。不要尝试直接从主题内的插件加载文件。

结束

相关推荐

Debug errors on sidebar

我正在wordpress 3.8上使用一个儿童主题“Twenty14”。在调试模式下,我会遇到以下关于小部件的错误。注意:正在尝试获取\\wordpress\\wp content\\themes\\tema2014\\functions\\widgets中非对象的属性。php在线148update_post_meta($post->ID, \"_sidebar\", $_POST[\"link\"]); 以及注意:未定义的索引:link in\\wordpress\\wp content