add_action('pre_get_posts', function($q){
if ($q->is_feed) $q->set('posts_per_page', 50);
});
站点有八百多篇文章,feed 里永远只有十条,也没有翻页地址,新读者订阅后翻不到旧内容。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,feed 的条数由 posts_per_page 决定,但 feed 请求会走自己的默认值,后台阅读设置里的数字不生效。主题若在 pre_get_posts 里统一改条数,又会被 feed 的查询参数覆盖。
围绕「feed 条数限制」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:用 pre_get_posts 判断 is_feed 后单独设 posts_per_page;需要更多条数时确认阅读器支持分页,分页参数要一起给;条数调大后注意 feed 体积,全文输出加五十条会到几兆。
改完只确认一件事:feed 里出现五十条,翻页地址能取到更早的文章。
