用 remove_meta_box 隐藏了价格面板,编辑文章点更新后,原来有值的 3 个价格字段全变成空字符串,前台显示“价格面议”。乍看像缓存或者权限的锅,追下去往往不是。

remove_meta_box('book_price', 'book', 'normal');
remove_action('save_post_book', 'save_book_price');
// 保存回调里只在 isset($_POST['book_price']) 时更新

追下去是这么回事:remove_meta_box 只移除界面,save_post 里的保存逻辑仍然执行。表单没有提交这些键,代码没判断就直接 update_post_meta 写空,隐藏面板和停用保存回调是两件事。

「remove_meta_box 空值覆盖」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

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

具体做法是,隐藏面板时一并移除对应的 save_post 回调;保存前用 isset 判断字段是否存在;先在测试站对比保存前后的 meta 值。

验收就看一点,隐藏面板后保存文章,数据库里的价格字段保持原值,前台不再显示价格面议。

作者 9823189