后台讨论设置里勾了评论必须人工批准,管理员自己在文章下回复一条,前台照样显示等待审核,全站只有一个人也过不了这一关。乍看像缓存或者权限的锅,追下去往往不是。
add_filter('comment_previously_approved', function($approved){
return current_user_can('moderate_comments') ? true : $approved;
});
追下去是这么回事:comment_moderation 对所有新评论一视同仁,管理员身份不在豁免名单里。真正管豁免的是 comment_previously_approved,它只对已经通过过的邮箱生效。两个选项名字接近,很容易勾错。
「评论待审核挂起」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
具体做法是,打开设置里的讨论页,确认 comment_moderation 与 comment_previously_approved 各自的状态,别把两者当成一个;要让管理员免审,用 comment_previously_approved 加过滤器按 capability 放行,别去改核心文件;清一遍对象缓存再发一条测试评论,缓存里的审核状态会骗人。
验收就看一点,管理员回复后立即出现在前台,游客用新邮箱发的评论仍停在待审核列表里。
