后台外观的菜单页面里,位置分配那块只有「由主题自动添加」,自己注册的「页脚菜单」始终不出现,代码里明明写了。乍看像缓存或者权限的锅,追下去往往不是。
add_action('after_setup_theme', function () {
register_nav_menus([
'main' => '主菜单',
'footer' => '页脚菜单',
]);
});
追下去是这么回事:register_nav_menus 必须在 after_setup_theme 阶段调用,挂到 init 或更晚时,菜单管理页已经完成位置收集,新位置不会补进去。调用太晚还会触发 _doing_it_wrong 提示。
「register_nav_menus 调用时机」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
具体做法是,把注册代码移进 after_setup_theme 的回调函数里;确认没有别处重复注册,重复会以后一次为准;保存后重新打开菜单页面,位置列表才会刷新。
验收就看一点,菜单页面出现「页脚菜单」位置,分配后前台页脚按设定输出。
