订阅器里出现了还没发布的草稿标题,其中一篇是明早定时发布的,点进去是 404,订阅用户直接在邮件里问是怎么回事。乍看像缓存或者权限的锅,追下去往往不是。
$q = new WP_Query(array( 'post_status' => 'publish', 'posts_per_page' => 20, 'ignore_sticky_posts' => true, ));
追下去是这么回事:自定义 feed 用 WP_Query 时没设 post_status,默认取已发布,但插件把它改成了 any。预览链接被阅读器抓到后,草稿就进了公开输出。定时文章按发布时间过滤,时区不对也会提前露出。
「feed 输出草稿」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,自定义 feed 查询里显式写 post_status 为 publish,别用 any;草稿和私密文章在 feed 输出前再校验一次权限;定时文章的时间按 GMT 对比,别用本地时间直接比。
验收就看一点,feed 里不再出现草稿标题,定时文章到点后才出现。
