用脚本通过 REST 发了一篇测试文章,本来只想存草稿,结果十分钟后收到订阅通知,首页也出现了。返回的 JSON 里 status 是 publish。乍看像缓存或者权限的锅,追下去往往不是。
curl -X POST https://example.com/wp-json/wp/v2/posts \
-H 'Content-Type: application/json' \
-d '{"title":"测试","status":"draft"}'
追下去是这么回事:wp_insert_post 在没传 post_status 时默认用 publish,REST 控制器同样沿用这个默认值。有发布权限的账号调用时,没人会替你改成 draft。
碰到「status 默认 publish」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,请求体里显式带上 status 字段,值写 draft,不要依赖默认;用权限更低的账号调接口,没发布权限时默认会落到 pending;把已经误发的文章批量转回草稿,并检查订阅通知有没有发出去。
验收就看一点,接口返回的 status 是 draft,前台列表里查不到这篇文章。
