新建了 book 文章类型,后台列表里明明有十几条数据,前台用 WP_Query 查出来却是空的,换成 get_posts 结果一样。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,post_type 传的字符串与注册名大小写不一致,或者这个类型注册时 public 为 false,查询前的权限过滤直接把它排掉了。

「WP_Query 自定义类型」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。

$q = new WP_Query([
  'post_type' => ['book'],
  'posts_per_page' => -1,
]);
var_dump($q->found_posts);

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,把 post_type 写成数组并核对注册名的大小写;加上 posts_per_page 参数排除分页带来的干扰;用命令行列出该类型文章数量与查询结果对照。

最后用这个标准收尾,found_posts 与后台列表的条数一致,循环能正常输出。

作者 9823189