后台菜单已经分配到「主菜单」位置,前台头部却输出一串页面链接,顺序和后台完全不一样,还带着「关于」这种没进菜单的页面。日志里能对上时间点,这种反而好排。

wp_nav_menu 的 theme_location 写成了 primary,register_nav_menus 里注册的键是 main,匹配不上就走到 fallback,默认回退成 wp_page_menu 输出所有页面。这个回退不报错,很难一眼看出。这一点先确认清楚,后面就不用反复试。

register_nav_menus(['main' => '主菜单']);
wp_nav_menu(['theme_location' => 'main', 'fallback_cb' => false]);

「wp_nav_menu theme_location」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:打开 functions.php 看 register_nav_menus 里注册的键名,照抄到模板;把 fallback_cb 设成 false,匹配失败时宁可空着也不输出页面列表;改完在后台重新保存一次菜单位置分配。

结果对不对很好判断,前台导航按后台菜单顺序输出,没进菜单的页面不再出现。

作者 9823189