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

WordPress登录/登出切换次级菜单且保留主导航不变如何实现

问题原因

你现有代码使用的wp_nav_menu_args过滤器是全局生效的,没有限制作用范围,所以会修改全站所有导航菜单的调用参数,导致主导航也被强制替换为登录/登出对应的次级菜单。

解决方案

你只需要在原有过滤逻辑中增加菜单显示位置判定,仅让切换逻辑作用于顶部次级菜单对应的位置即可,步骤如下:

  1. 先获取顶部次级菜单的位置别名
    进入WordPress后台 → 外观 → 菜单 → 切换到「管理位置」标签页,找到你部署Player Logged-in/Player Logged-out这两个次级菜单的位置,复制对应的英文别名(不同主题的命名不同,常见如top_sub_menu、header_secondary等)
  2. 替换functions.php中的原有代码为以下版本
    注意将代码中的your_top_sub_menu_location替换为你上一步复制的位置别名:
function my_wp_nav_menu_args( $args ) {
    // 仅对顶部次级菜单的位置执行切换逻辑
    if ( $args['theme_location'] === 'your_top_sub_menu_location' ) {
        if( is_user_logged_in() ) { 
            $args['menu'] = "Player Logged-in";
        } else { 
            $args['menu'] = "Player Logged-out";
        }
    }
    return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

修改后,只有顶部次级菜单会根据用户登录状态切换,Main主导航不会受到任何影响。

备用方案(无需过滤器)

如果你是直接在主题模板(一般是header.php)中手动调用顶部次级菜单,可以直接在调用位置写判断逻辑,无需使用全局过滤器,写法更简单:

// 直接在需要输出顶部次级菜单的位置添加以下代码
if ( is_user_logged_in() ) {
    wp_nav_menu( array( 'menu' => 'Player Logged-in' ) );
} else {
    wp_nav_menu( array( 'menu' => 'Player Logged-out' ) );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:07