退房this tutorial 通过kaiser 然后逐步进行:
每次注册脚本并将jquery添加为依赖项时,它都会添加到<head>
在最终呈现的HTML页面中。由于这会阻塞页面呈现时间(包含的脚本可能会修改DOM),因此我想将其添加到页面末尾以防止这种行为。这将使谷歌感到高兴,并对我的页面排名产生积极影响,因为页面加载时间应该会减少。
class RegisterScripts
{
public function __construct()
{
add_action( \'wp_enqueue_scripts\', array( $this, \'scripts\' ) );
}
public function scripts()
{
wp_enqueue_script(
\'requirejs\',
get_stylesheet_directory_uri().\'/assets/scripts/vendor/requirejs/require.js\',
array( \'jquery\' ),
filemtime( plugin_dir_path( __FILE__ ).\'assets/scripts/vendor/requirejs/require.js\' ),
true
);
}
}
那么core做什么呢?实际上这很容易。这个
WP_Scripts
类是类的扩展
WP_Dependencies
. 当你打电话给
wp_enqueue/register_script()
, 它只使用
add_data()
方法。
$wp_scripts->add( $handle, $src, $deps, $ver );
if ( $in_footer )
$wp_scripts->add_data( $handle, \'group\', 1 );
如您所见,它添加了带有脚本名称的“数据”作为第一个参数,并将一些组设置为1。这只是告诉类将脚本数据放在全局数组中的位置。然后,当在数组中循环时,WP只检查当前钩子并打印默认部分,如果是页面末尾,则打印
wp_footer
钩子,组等于和/或大于1的所有脚本。就是这样。
现在,我们快速解决这一问题:
// Move jQuery to the footer
global $wp_scripts;
$wp_scripts->add_data( \'jquery\', \'group\', 1 );
当然,你也可以在其他脚本中这样做。默认脚本列表(可能不完整)
can be found in
Codex. 如果你想得到真正的名单,你必须把
$GLOBALS[\'wp_scripts\']
然后查看阵列。如果你想把这些都打包成一个独立的插件,你当然可以这样做。我建议使用mu插件。
/* Plugin Name: jQuery to the footer! */
add_action( \'wp_enqueue_scripts\', \'wcmScriptToFooter\', 9999 );
function wcmScriptToFooter()
{
global $wp_scripts;
$wp_scripts->add_data( \'jquery\', \'group\', 1 );
}
请记住,可能有插件或主题脚本出错(!)这个解决方案可能会失败。通常,如果将自定义脚本加载到标头中,或者如果绕过整个WP依赖API并对脚本进行硬编码,就会发生这种情况。结论:在将该迷你插件添加到已激活的页面之前进行测试。如果不起作用,请检查脚本加载的位置和方式。然后修复该问题,并尝试将这些阻塞脚本加载到页脚。谷歌会爱你的。
如果你想更进一步,这里有一个相关的建议。如果要创建JavaScript类,请查看JavaScript++.