set_transient('book_notice_' . get_current_user_id(), 'saved', 30);
// 输出后
delete_transient('book_notice_' . get_current_user_id());

保存设置后顶部出现“设置已保存”,刷新页面提示还在,连点三次保存会叠出三条一样的。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,提示状态存在 option 里,输出后没有删除,通知回调也没有判断当前屏幕,任何后台页面都会重新读一次。存在 option 里的标记不会自己过期。

「admin_notices 重复提示」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:改用 transient 存一次性提示;输出后立刻 delete_transient;用 get_current_screen 限定只在该设置页显示。

改完只确认一件事:保存后只出现一条提示,刷新页面消失,连点三次也不会叠加。

作者 9823189