在 functions.php 顶层写 if (is_single()) 给文章页加一段脚本,条件永远不成立,脚本一次都没输出,var_dump 出来是 bool(false)。日志里能对上时间点,这种反而好排。
functions.php 在主题加载阶段就执行,这时主查询还没发起,is_single 依赖的 queried object 是空的,只能返回 false。条件标签要等到 wp 钩子之后才可靠。这一点先确认清楚,后面就不用反复试。
add_action('wp_enqueue_scripts', function () {
if (is_singular('post')) {
wp_enqueue_script('post-extra', get_theme_file_uri('/js/post.js'), [], '1.0', true);
}
});
「条件标签判断时机」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:把判断包进 wp_enqueue_scripts 或 template_redirect 的回调里,那时查询已完成;确实要更早执行就挂 wp 钩子,优先级用默认值即可;用 is_singular('post') 替代 is_single,语义更清楚也不容易误判。
结果对不对很好判断,打开任意文章页源码里能看到 post.js,首页和归档页不加载。
