建好的 single-book.php 放在主题根目录,访问书籍详情页渲染的却还是 single.php,改文件名也照样不走自定义模板。乍看像缓存或者权限的锅,追下去往往不是。

add_filter('template_include', function ($t) {
  error_log($t);
  return $t;
});
# 或装上 Query Monitor 看模板

追下去是这么回事:模板层级只认已注册的类型名,注册时用了下划线或大小写不同,文件名与它逐字对不上就退回上一层通用模板。

「模板层级优先级」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,在模板过滤器里打印当前命中的模板文件路径;逐字核对文件名与注册时用的类型名是否一致;清掉页面缓存后重新访问详情页确认模板已切换。

验收就看一点,详情页用上了自定义模板,其他文章类型的页面不受影响。

作者 9823189