WordPress 主题的 wp_enqueue_script:依赖、版本与加载时机

· wordpress · 阅读 13
摘要

直接把 写进 header.php 能跑,但会带来一堆麻烦:缓存不更新、插件冲突、加载顺序不可控。统一走 enqueue 才是正路。最小写法add_action('wp_enqueue_scripts', function

直接把 <script> 写进 header.php 能跑,但会带来一堆麻烦:缓存不更新、插件冲突、加载顺序不可控。统一走 enqueue 才是正路。

最小写法

add_action('wp_enqueue_scripts', function(){
    wp_enqueue_style('my-style', get_stylesheet_uri(), [], '1.0.0');
    wp_enqueue_script(
        'my-main',
        get_template_directory_uri() . '/js/main.js',
        ['jquery'],
        '1.0.0',
        true
    );
});

四个参数的意义

  • 依赖数组:['jquery'] 表示 jquery 先加载。不写的话脚本可能在前,$ 未定义直接报错。
  • 版本号:拼到 URL 后面的 query 参数。用固定字符串,浏览器缓存永不失效;用 filemtime() 取文件修改时间才能自动破缓存。
  • 是否在 footer:第五个参数传 true,脚本放到页面底部,不阻塞渲染。
  • handle 唯一性:同名会覆盖,插件和主题用了同一个 handle 就会互相顶掉。

版本号的正确做法

$ver = filemtime(get_template_directory() . '/js/main.js');
wp_enqueue_script('my-main', $url, ['jquery'], $ver, true);

写成 time() 是反例。每次刷新版本号都变,缓存等于没有。

条件加载

只在需要的页面加载,能省不少流量:

if (is_singular()) {
    wp_enqueue_script('my-comment', ...);
}

不要做的事

  • 不要用 wp_deregister_script('jquery') 换 CDN,很多插件依赖,一换就白屏
  • 不要在 wp_head 钩子里手写 script 标签绕过 enqueue