前台导航六个菜单项全部带 current-menu-item 类,样式里全部加粗加下划线。只有首页那一项是对的,切到其他页面也一样全亮。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,自定义 walker 里判断当前页时用了 in_array 的宽松比较,$item->object_id 是字符串,当前 ID 是整数,空值也会被判成相等。条件写反后整排都命中。

碰到「菜单高亮错乱」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

if ((int) $item->object_id === (int) $current_id && $item->object_id) {
    $classes[] = 'current-menu-item';
}

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,先把当前菜单项 ID 打印出来 确认比较两边类型一致;改用严格比较 并且排除 object_id 为 0 的情况;改完清一遍菜单缓存 再看类名。

最后用这个标准收尾,只有当前页面对应的菜单项带高亮类,其余项恢复普通样式。

作者 9823189