后台把发布时间设成 11 月 20 日 09:00,到点没动静,17:00 才上线,差了整整八小时,服务器 date 显示的是 UTC。日志里能对上时间点,这种反而好排。
站点时区设成 UTC,编辑时填的却是北京时间,WordPress 按站点时区换算 post_date_gmt,两边差八小时。定时任务比较的是 GMT 时间,换算错就一直等到傍晚。这一点先确认清楚,后面就不用反复试。
wp option get timezone_string wp post list --post_status=future \ --fields=ID,post_title,post_date,post_date_gmt
围绕「定时发布时区」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:在设置里把时区改成 Asia/Shanghai,别留 UTC;已有定时文章用 wp post update 重存一次,让 GMT 列重算;服务器和 PHP 的时区也统一,date 与 wp option get timezone_string 都要看;改完建一篇五分钟后的测试文章验证。
结果对不对很好判断,测试文章在设定的九点整上线,post_date_gmt 比 post_date 早八小时。
