站点给访客挂了一条注册解锁公告,登录后公告照旧盖在首页,退出再登录也一样,后台把可见性设成仅访客,前台完全不生效。日志里能对上时间点,这种反而好排。

模板里先输出公告 HTML 再调用 current_user_can 做判断,条件只包住了统计脚本,没包住输出。缓存插件又把访客版本整页缓存下来,登录用户拿到的还是同一份 HTML。这一点先确认清楚,后面就不用反复试。

if ( ! is_user_logged_in() ) {
    get_template_part( 'parts/notice' );
}

这次卡住的地方就在「公告登录用户重复展示」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:把判断提到输出之前,用 is_user_logged_in 包住整段公告,别只包统计;给缓存插件加登录态排除规则,登录用户直接绕过页面缓存;用一个已登录账号和一个隐身窗口分别打开首页,对比返回的 HTML。

结果对不对很好判断,登录后首页不再出现访客公告,隐身窗口仍然能看到这一条。

作者 9823189