WordPress中如何仅向指定导航菜单添加自定义导航项
问题根源
你当前挂载的wp_nav_menu_items过滤器没有做菜单范围判定,默认会作用于站点所有前台渲染的导航菜单,所以自定义项会出现在全部菜单里。
具体修改步骤
只需要调整代码即可实现仅主导航生效:
- 给回调函数
add_last_nav_item增加第二个入参$args,该参数存储当前正在渲染的菜单的配置信息,可用来识别菜单位置 - 在回调内部增加判定逻辑:仅当当前菜单的主题位置标识为
primary(即常规主题注册主导航的默认slug,如果你用的主题主导航slug不同,替换为对应值即可)时,才追加自定义菜单项,其余菜单直接返回原有菜单项 - 调用
add_filter挂载过滤器时,声明回调接收2个参数——WordPress的过滤器默认只向回调传递1个参数,不手动声明的话拿不到$args参数
修正后完整代码
if ( wp_is_mobile() ) { function add_last_nav_item($items, $args) { // 限定仅主导航追加自定义项 if ( $args->theme_location === 'primary' ) { $items .= '<li class="text-center"><a href="#myModal" role="button" data-toggle="modal">TEST</a></li>'; } return $items; } // 第三个参数10是默认优先级,第四个参数2声明回调接收2个入参 add_filter( 'wp_nav_menu_items', 'add_last_nav_item', 10, 2 ); }
补充说明:如果加完代码主导航里没出现自定义项,说明你当前主题注册的主导航位置slug不是默认的
primary,可以去主题注册导航菜单的代码里找到主导航对应的theme_location值替换即可,部分主题会用main_menu、primary_nav这类slug。
内容的提问来源于stack exchange,提问作者JDawwgy
相关产品推荐
相关产品推荐

