在列表页勾了 12 篇草稿改分类,下拉里状态那一项没动,保存后这 12 篇全变成已发布,订阅邮件已经发出去两封。乍看像缓存或者权限的锅,追下去往往不是。

SELECT ID, post_status, post_date FROM wp_posts
WHERE ID IN (903,904,905) ORDER BY ID;
wp post update 903 --post_status=draft

追下去是这么回事:批量编辑提交的是整组字段,状态下拉即使没选也会带一个默认值 publish。服务端按提交值整体更新,没有「保持不变」这一层判断。

「批量编辑状态覆盖」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

具体做法是,批量操作前先确认状态下拉显示的是「不更改」;用代码批量改分类时显式排除 post_status 字段;误发的立刻转回草稿,并从订阅队列里撤回未发送的;给批量接口加白名单,只允许改指定字段。

验收就看一点,这 12 篇文章状态回到 draft,前台列表和 RSS 里都查不到。

作者 9823189