列表勾选 30 篇做批量编辑,只把分类改成“技术”,保存后价格字段全部变成 0,单篇编辑却正常。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,批量编辑的保存回调没有判断 bulk edit 场景,$_REQUEST 里没有价格键也执行 update_post_meta。批量请求只提交分类,缺失的字段被当成空值写入。

「批量编辑覆盖字段」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

if (isset($_REQUEST['bulk_edit']) && $_REQUEST['bulk_edit']) {
    if (isset($_REQUEST['book_price'])) update_post_meta($id, 'book_price', $_REQUEST['book_price']);
    return;
}

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,在 save_post 里判断是否来自 bulk edit;只更新请求中实际存在的字段;保存前先备份 3 篇 对比操作前后的 meta。

最后用这个标准收尾,批量改分类后价格保持原值,单篇编辑价格仍能正常保存。

作者 9823189