如何批量将WordPress所有入队脚本样式调整至头部加载
WordPress批量将所有入队脚本/样式调整至头部加载方案
不需要逐个注销(dequeue)后重新入队资源,直接通过全局资源对象批量修改参数即可实现需求,实现逻辑如下:
WordPress核心会将所有已注册、入队的脚本、样式配置分别存储在全局实例$wp_scripts、$wp_styles中,每个资源的加载位置参数都保存在实例的注册资源列表里,只要在资源输出前遍历修改对应参数,就能批量调整加载位置,完全不会破坏原有依赖关系。
注意:WordPress核心默认的样式资源本身就是在头部输出,只有主动配置了页脚加载的样式才会在页脚渲染,核心调整对象为脚本的
$in_footer参数,样式部分做兜底兼容即可。
将以下代码添加到当前主题的functions.php文件,或者自定义功能插件中即可生效:
add_action('wp_enqueue_scripts', function() { global $wp_scripts, $wp_styles; // 批量修改所有脚本加载位置为头部 if (!empty($wp_scripts->registered) && is_array($wp_scripts->registered)) { foreach ($wp_scripts->registered as $script) { // 强制关闭页脚加载标记 $script->args = false; // 同步修正资源分组标记,0代表头部、1代表页脚 if (isset($script->extra['group'])) { $script->extra['group'] = 0; } } } // 兜底修正样式加载位置,确保所有样式在头部输出 if (!empty($wp_styles->registered) && is_array($wp_styles->registered)) { foreach ($wp_styles->registered as $style) { if (isset($style->extra['group'])) { $style->extra['group'] = 0; } } } }, 99999);
注意事项
- 代码挂载的
wp_enqueue_scripts钩子优先级设置为99999,是为了保证执行时机在所有主题、插件完成资源入队操作之后,避免后注册的资源漏改 - 脚本统一移至头部加载可能会阻塞页面首屏渲染,拖慢加载速度,非必要场景不建议全局开启,有特定页面需求时可以增加页面判断逻辑,仅在目标页面执行该修改
- 部分依赖DOM就绪顺序的脚本移至头部后可能出现运行错误,这类问题属于脚本本身执行逻辑的依赖问题,需要单独给对应脚本添加延迟加载属性或者调整执行时机,和资源加载位置的配置无关
内容的提问来源于stack exchange,提问作者haveman
相关产品推荐
相关产品推荐

