wp sitemap generate --batch=2000
wp eval 'echo wp_count_posts()->publish;'
wc -l sitemap.xml

站点有 4.6 万篇文章,点生成后等了 30 秒页面报 504,sitemap 文件只有 8000 条,后面的文章一条没写进去。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,生成器一次性查全表再拼 XML,查询和字符串拼接都放在一个请求里,超过 PHP 的 max_execution_time。文件写到一半被中断,留下不完整的结果。

「sitemap 生成超时」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。

处理上按这个顺序:改成按 ID 分批查询,每批 2000 条;用命令行跑生成,不受 web 请求超时限制;生成完校验条数,和文章总数对得上再提交。

改完只确认一件事:命令行生成跑完,sitemap 条数与已发布文章数一致,没有 504。

作者 9823189