WordPress 菜单设置:二级、多级、下拉与高亮
菜单做不出来,九成不是因为不会拖拽,而是三个位置对不上:菜单建好了没分配给「菜单位置」,主题压根不支持多级,或者当前页高亮的类被主题的 CSS 覆盖了。这篇从 外观 → 菜单 的实际界面讲起,把二级、多级、下拉、高亮这四件事拆开说。
菜单位置:外观 → 菜单 里到底有什么
登录后台后走 外观 → 菜单,这个页面结构十几年没变过,从上到下就四块:
- 左上「选择要编辑的菜单」下拉 + 「创建新菜单」按钮。新建时只填名称,「自动添加新顶级页面」这个勾早期版本有,现在多数主题里去掉了,别指望它自动同步。
- 左侧面板「添加菜单项」:页面、文章、自定义链接、分类目录,四个来源。
- 中间「菜单结构」:已经加进去的项,拖拽排序,也是做二级菜单的地方。
- 底部「菜单设置」:显示位置(这个才是让菜单出现在前台的开关)。
第一次进这个页面,如果左侧看不到「页面」「文章」面板,点右上角的「显示选项」,把这几项勾上。找不到面板不是权限问题,是这个折叠开关关了。后台其他页面的通用操作见 WordPress 后台入门。
最省事的做法是先用「自动添加页面」把所有页面一次性加进来,再删掉不要的,比一个个勾快得多。加完之后一定要点底部「保存菜单」,这个按钮不点,前面所有拖拽都白做——这是新手最常见的一次性损失。
二级菜单:靠缩进,不是靠新建
WordPress 没有「添加子菜单」按钮。二级菜单的唯一做法是把某一项往右拖一点,它就会变成上一项的子项。拖到位时该项会显示成灰色缩进块,同时上方出现「sub item」字样。
- 先按顺序把一级项排好,父项在上,子项紧挨着放在父项的正下方。顺序不对拖不出缩进。
- 鼠标按住子项左侧的十字图标,向右拖动约 30 像素,松手。
- 看到该项变成浅色缩进块、标签显示 sub item,说明成功了。
- 要取消,往左拖回去,拖到和父项左边缘对齐即可。
- 点保存菜单。
两个容易踩的点。一是子项的缩进只能一级一级来,想让它成为「三级」必须先让它成为二级,再继续往右拖;不能一次拖到底。二是拖动时如果松手位置偏上偏下,会变成排序而不是缩进,看不出来就再拖一次,慢一点没关系。
还有一个隐性问题:父项本身如果是一个页面链接,点它会跳到那个页面,下拉只是悬停出现。所以父项最好用「自定义链接」,URL 填 #,这样点击不会跳到一个内容空白的父页面。
菜单位置:主题支持哪几个,怎么分配
「菜单设置」里的「显示位置」由主题注册,不同主题差别很大。常见的有这几种:
| 位置名称 | 出现在哪 | 典型用途 |
|---|---|---|
| 主菜单 / Primary | 页头导航栏 | 全站主导航,只放一个 |
| 页脚菜单 / Footer | 页脚区域 | 关于、隐私、联系等信息页 |
| 移动端菜单 / Mobile | 汉堡菜单展开后 | 部分主题独立注册,多数和主菜单共用 |
| 顶部栏 / Top Bar | 页面最上方细条 | 电话、邮箱、语言切换 |
| 侧边栏菜单 / Sidebar | 文章侧栏 | 产品分类、文档目录 |
分配方式很简单:建好菜单后勾选对应位置,保存。但这里有个反直觉的规则——一个位置只能挂一个菜单,一个菜单可以挂多个位置。所以页脚想复用主导航,直接勾两个位置即可,不用重复建。
换主题之后菜单位置的注册名会变,原来的分配关系全部失效,前台导航区变成空白或显示「未设置菜单」。这时候进 外观 → 菜单,重新勾一次位置就好,菜单数据本身还在,不会丢。
多级菜单:三级以上要看主题给不给
WordPress 核心对菜单层级没有限制,你能拖出五级。但能不能显示出来是另一回事,卡在两处:
- 主题的 CSS 只写了一级下拉。大量免费主题的样式表里只有
.sub-menu的一层定位,三级菜单会叠在二级上面,看起来像没显示。 - 主题的 Walker 类只输出两层。有些主题在 functions.php 里自定义了 Walker,或者用
depth参数限制了层数,比如wp_nav_menu(array('depth' => 2)),多出来的层级直接不输出。
判断方法:在前台右键检查元素,看三级项的 HTML 是否存在于 DOM 里。存在但看不见,是 CSS 问题;根本不存在,是 depth 或 Walker 的限制,只能改主题。改子主题的做法见 WordPress 主题定制。
从可用性讲,三级以上就不建议做了。鼠标要精确斜向移动到第三级,稍一偏就收起来,移动端更是无法操作。真有很多层级要放,用侧边栏菜单或页面内的目录结构代替,比硬做四级导航靠谱。
当前页高亮:认准这几个类名
WordPress 会自动给菜单项加类,不用插件。常用的有四个:
| 类名 | 加在谁身上 | 什么时候出现 |
|---|---|---|
current-menu-item |
当前正在看的那个菜单项 | 访问的正好是这一项指向的页面 |
current-menu-parent |
当前页的直属父项 | 正在看二级页面 |
current-menu-ancestor |
所有上级祖先项 | 正在看三级及更深的页面 |
menu-item-has-children |
带下拉的父项 | 该项下有子项时静态存在 |
高亮不生效,先在浏览器里检查当前项的 class 列表里有没有 current-menu-item。有类但没颜色,是主题 CSS 优先级问题,加一条更具体的规则即可:
.main-navigation .current-menu-item > a,
.main-navigation .current-menu-ancestor > a {
color: #1a73e8;
border-bottom: 2px solid #1a73e8;
}
没有这个类,通常是两种情况:菜单项指向的是「自定义链接」而不是真实页面,WordPress 无从比对;或者文章页不在菜单里,此时该高亮的是它所属的分类项,需要主题支持「文章页高亮所属分类」,这个逻辑得自己写,核心不提供。
还有一类高亮是「滚动到某段就高亮对应导航」,那是锚点监听,属于前端脚本,和 WordPress 的菜单类无关,别混在一起查。
菜单不显示,按这四步查
前台导航区空白,别急着换主题,按顺序排:
- 位置分配了吗:外观 → 菜单 → 底部「显示位置」有没有勾。没勾是最高频原因,占了实际案例的一大半。
- 菜单里有东西吗:某些主题在菜单为空时会回退输出「所有页面」,另一些直接不输出。菜单结构里至少放一项再测。
- 主题有这个位置吗:换过主题的话,位置名变了,旧的分配失效。看主题文档或 appearance → menus 页面上列出的位置名。
- 被 CSS 或缓存藏了吗:检查元素看导航容器是否存在、是否
display:none;装了缓存插件先清缓存,再用无痕窗口看。
如果前台直接报 404 或跳转异常,那是伪静态而不是菜单的问题,看 WordPress 404 处理。
什么情况下该上菜单插件
核心菜单够用,但有三类需求它做不到:巨型下拉(Mega Menu,带图标、分栏、图片)、按用户角色显示不同菜单、菜单项带徽标或标签。这时才考虑插件,Max Mega Menu 是最常用的一个,免费版能覆盖大部分场景。
要注意的是,Mega Menu 插件会接管菜单输出,主题自身的下拉样式和移动端逻辑可能失效,需要到插件设置里重新配一遍移动端行为。装之前先在测试站验证,不要直接在生产站装。插件选型的通用原则见 WordPress 必备插件。
另外,如果你的菜单改完样式全乱,先确认是不是缓存插件把旧的 CSS 合并文件缓存住了——清一次 CSS 合并缓存,比改代码快得多。主题本身的导航结构设计(几个一级、下拉放几项、移动端汉堡怎么做)在 WordPress 主题推荐 的选型部分有对照,选主题时就把导航能力看清楚,比事后改省事。