wp_enqueue_script 加了半天,脚本就是不出现在页面
四个参数挨个填对,检查了三遍路径,浏览器里 view-source 搜 script 标签,空的。我一开始以为是缓存插件在作怪,关掉还是空的。 问题出在 wp_head()。我的 header.php 里压根没写它。 钩子挂了,但页面上没有
四个参数挨个填对,检查了三遍路径,浏览器里 view-source 搜 script 标签,空的。我一开始以为是缓存插件在作怪,关掉还是空的。
问题出在 wp_head()。我的 header.php 里压根没写它。
钩子挂了,但页面上没有 wp_head 这个「插座」
wp_enqueue_script 默认把脚本排进 wp_head 的队列,最后靠 wp_head() 这个函数把队列吐出来。函数没被调用,队列攒得再多也没用。
同理,wp_footer() 没写的话,in_footer = true 的脚本一样消失。
<!-- header.php,放在 </head> 之前 -->
<?php wp_head(); ?>
</head>
<!-- footer.php,放在 </body> 之前 -->
<?php wp_footer(); ?>
</body>
这两个函数不光管脚本样式。后台的工具栏、某些插件的内联样式、nonce 都从这儿走。我第一次写主题时嫌它们多余就没加,结果装了个统计插件后发现后台工具栏也没了,找了半天。
位置对了还不出来,查这三个地方
第一个,句柄名。第二个参数必须唯一,如果和别的插件重名,WordPress 会认为已经注册过,直接跳过你这份。名字加前缀,别用 jquery、main 这种。
第二个,是否真的挂到了 wp_enqueue_scripts 上。写在 init 里有时候能成,有时候不成,别赌。
// functions.php
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_script(
'mytheme-main',
get_template_directory_uri() . '/assets/main.js',
array( 'jquery' ),
'1.0.0',
true
);
} );
第三个,get_template_directory_uri() 和 get_stylesheet_directory_uri() 用混了。子主题场景下前者指向父主题。脚本放在子主题目录里,却用 get_template_directory_uri() 拼路径,结果浏览器 404。控制台里能看到红字,但页面源码里标签是有的——这种情况我遇到过,一开始光看源码没开控制台,又白忙一场。
依赖写错会静默失败
第三个参数传 array( 'jquery' ),结果你没注册过名为 jquery 的句柄——大部分情况是没问题的,WordPress 自带。但如果你禁用了 jQuery,或者用了某个把 jQuery 移除的主题,这个脚本就永远排不上队,也不会报错。
我现在的习惯:依赖数组先传空,确认脚本能出来,再逐个往上加。加一个刷一次页面,比一次性写全然后挨个排雷快。
这套排查顺序我自己用了好几年,没什么技术含量,就是能省时间。