读者留言成功,页面提示已提交,刷新还是原来的十二条,半小时后突然变成十三条,后台评论列表里其实早就有了。乍看像缓存或者权限的锅,追下去往往不是。
add_action('wp_insert_comment', function($id, $c){
if ($c->comment_approved == '1') clean_post_cache($c->comment_post_ID);
}, 10, 2);
追下去是这么回事:整页缓存不区分登录状态和评论变化,评论写入后没触发对应页面的缓存清理。有些缓存插件只监听文章更新,评论钩子根本没挂。评论区是动态片段,被当成静态 HTML 存了下来。
碰到「评论区缓存」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,评论新增和审核通过时都清一次对应文章页的缓存,两个钩子都要挂;把评论区做成独立片段,整页缓存时跳过这一块;给已登录用户直接绕过页面缓存,避免看到别人的旧评论。
验收就看一点,提交后刷新立刻能看到新评论,无需等待缓存过期。
