后台把公告标题从系统维护改成维护完成,前台刷新二十次还是旧文案,禁用缓存插件后正常,重新启用又变回去。乍看像缓存或者权限的锅,追下去往往不是。

add_action( 'save_post_notice', function ( $id ) {
    delete_transient( 'notice_list_' . $id );
    wp_cache_delete( 'notice_' . $id, 'site_notice' );
} );

追下去是这么回事:公告查询结果存进了 transient,更新钩子里只清了页面缓存,没删这个键。Redis 里的对象缓存也有一份,过期时间设了十二小时。

「公告缓存刷新」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

具体做法是,在 save_post 钩子里按公告 ID 删除对应 transient;对象缓存组加前缀,更新时整组清掉,别逐个猜键名;改完标题后前台强刷一次,确认新文案立刻出现。

验收就看一点,保存后前台立即显示新标题,不再等十二小时过期。

作者 9823189