为什么没有在标题中加载jQuery 2.1?

时间:2015-11-08 作者:Steven

因为我想使用jQuery 2.1而不是1.11,所以首先必须取消注册jQuery。然后用新值注册它:

add_action( \'wp_enqueue_scripts\', \'add_scripts\' );

function add_scripts() {
    wp_deregister_script(\'jquery\');
    wp_register_script( \'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js\', false, \'2.1.0\', false);
    wp_enqueue_script(\'jquery\');
}
根据the manual, 这将在标题中加载脚本。但它已加载到页脚中。为什么会这样?

我这样问是因为我有一个插件,需要在标题中添加一些内容。由于jquery直到页脚才加载,因此会引发一些错误。

附:如果我做了以下事情:

    wp_deregister_script(\'jquery\');
    wp_register_script( \'jquery-2\', \'http:...\');
    wp_enqueue_script(\'jquery-2\');
WP根本不会加载任何内容-它完全中断。还有其他人经历过吗?

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

从理论上讲,您编写的代码应该可以工作,但在实际应用程序中,您缺少一些可能会影响代码工作方式的良好实践,因此最好通过一些疑难解答来勾选清单中的所有内容。

通过取消注册jquery 您正在删除jQuery核心和jQuery迁移javascripts,您可能想做的是取消注册核心并保持jQuery迁移。

jQuery迁移包含旧的遗留jQuery代码,它将遗留内容的所有功能移植到新版本的jQuery上。

在您链接的法典的同一页上,如果向下滚动,您可以找到handlers of integrated javascripts you can de-register.

因此,您必须注销jquery-core 而不是jquery 为了保持一些功能的完整性,这包括插件,它们可能需要运行一些遗留的jQuery东西。

您不需要在最后一个参数中附加“false”,因为默认情况下它已经是false了,我还建议删除您的协议,这确保了如果您以后想切换到https,jQuery将始终提供给浏览器。

最后,当您在一个大环境中编码时,名称空间非常重要,因为其他人的代码与您的代码一起运行。add_scripts() 如果您在functions.php 文件尝试添加主题的名称,或编写一些非常独特的内容,以便确保同一函数将来不会与来自插件或工作文件中其他内容的函数发生冲突。

add_action( \'wp_enqueue_scripts\', \'YOURTHEMENAME_scripts\' );

function YOURTHEMENAME_scripts() {
    wp_deregister_script(\'jquery-core\');
    wp_register_script(\'jquery-core\', \'//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js\', false, \'2.1.0\');
    wp_enqueue_script(\'jquery-core\');
}
请注意,Wordpress的加载顺序如下:

Core -> Plugins -> Theme
如果您试图从自定义插件中取消注册jQuery,那么您的主题可能正在接管脚本队列并与之混淆。

如果在所有这些之后,您仍在将Javascript放入页脚,那么您的header.phpfooter.php 文件:新手的原因之一可能是wp_head()wp_footer() 在你的主题中,我已经见过很多次了,这很容易成为可能。

wp_head() 是一个钩子,它为您添加元标记、css队列和js队列,最后一个标志参数设置为“false”。

wp_footer() 是一个钩子,它关心向您添加JS的其余部分,并将最后一个标志参数设置为“true”,以及从各种插件生成的额外标记(以及来自WP核心的管理栏)。

如果有,请仔细检查挂钩函数的位置wp_head() 在页脚中,这很容易成为javascript队列被添加到页脚的原因。

SO网友:HU ist Sebastian

第一:您必须将jquery注销器等内容放入一个用wp\\u enqueue\\u scripts挂钩调用的函数中。这样做:

add_action(\'wp_enqueue_scripts\',\'jquery_2_loader\');

function jquery_2_loader(){
//insert your jquery deregister and Register
}
第二个问题:许多插件依赖于排队jquery。所以如果你注销它,那些插件就不能再使用它了。

SO网友:futuernorn

你说得对falsewp_register_script 函数调用应确保脚本放置在页面标题中。您是否有任何其他插件可能正在修改脚本的位置?例如,插件Autoptimize 将尝试“智能地”在页脚中放置脚本,以尽可能加快加载速度。