You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress调用register_my_menus创建新菜单不生效问题

问题根源

菜单错位替换的核心原因是functions.php中的菜单注册代码存在PHP语法错误,导致自定义菜单位置完全没有注册成功。当WordPress在模板中找不到theme_location参数对应的已注册菜单位置时,会触发默认回退逻辑:自动选取站点内排序最靠前的可用菜单输出,因此会出现新建页脚菜单后顶部菜单被替换的串位问题。
原注册代码的具体错误点:

  • footer_menu配置项后多写了一个闭合括号),直接将配置数组提前截断,后续的blog_menu配置完全在数组结构外,会直接触发PHP语法错误,导致整个菜单注册函数运行失败
  • 原未配置多菜单时的调用代码未指定theme_location参数,本身就会触发WordPress的自动菜单匹配逻辑,不符合多菜单站点的调用规范
  • 原代码将菜单注册逻辑挂载在init钩子上,不是WordPress主题功能注册的标准钩子,容易出现兼容问题
修复方案

1. 替换functions.php中的菜单注册代码

将原有错误的注册代码替换为以下正确写法:

function register_my_menus() {
  register_nav_menus(
    array( 
      'top_menu'    => __( 'Top Menu', 'test' ),
      'footer_menu' => __( 'Footer Menu', 'test' ),
      'blog_menu'   => __( 'Blog Menu', 'test' )
    )
  );
}
add_action( 'after_setup_theme', 'register_my_menus' );

修正点说明:修复了数组括号匹配错误,补全了数组项的分隔逗号,将挂载钩子替换为WordPress官方推荐的主题功能注册钩子after_setup_theme,确保菜单功能正常加载。

2. 各模板位置按指定slug调用菜单

所有模板文件中调用菜单时,必须显式传入theme_location参数,对应注册时填写的位置slug:

  • 顶部菜单(header.php中使用,你之前写的这段参数逻辑正确,注册成功后即可正常生效):
<?php wp_nav_menu( array( 
  'theme_location' => 'top_menu', 
  'container_id'   => 'main-nav',
  'menu_id'        => 'menu-top-menu', 
  'menu_class'     => 'dropdown' 
) ); ?>
  • 页脚菜单(footer.php中调用,可根据样式需求自行添加容器、class、id参数):
<?php wp_nav_menu( array( 
  'theme_location' => 'footer_menu'
) ); ?>
  • 博客专区菜单调用时,将theme_location参数值设为blog_menu即可。

3. 后台重新分配菜单位置

代码上传更新后,进入WordPress后台「外观-菜单」页面,此时可以看到三个已注册的菜单位置选项,将你创建好的对应菜单勾选分配到匹配的位置,保存设置即可。

若操作完成后仍显示错位菜单,清空站点/浏览器缓存后刷新页面即可正常显示。

内容的提问来源于stack exchange,提问作者knefie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:03:23