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

WordPress登录/登出菜单问题:仅需切换二级菜单而非全部菜单

解决WordPress仅切换二级菜单的问题

你的问题出在原代码会全局修改所有调用wp_nav_menu的菜单,导致主菜单和二级菜单都被替换。要实现只切换二级菜单,需要在代码中添加判断逻辑,仅针对二级菜单进行修改,以下是两种可行方案:

方案一:通过菜单主题位置判断

首先找到主题中注册二级菜单的位置标识,打开主题的functions.php文件,找到类似这样的代码:

register_nav_menus( array(
    'primary' => '主菜单',
    'secondary' => '二级菜单' // 这里的'secondary'就是二级菜单的主题位置标识
) );

将你的原代码修改为:

function my_wp_nav_menu_args( $args = '' ) {
    // 将下面的'secondary'替换成你主题中二级菜单的实际主题位置标识
    if ( isset( $args['theme_location'] ) && $args['theme_location'] === 'secondary' ) {
        if( is_user_logged_in() ) { 
            $args['menu'] = 'logged-in';
        } else { 
            $args['menu'] = 'logged-out';
        }
    }
    return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

修改后,只有主题位置匹配的二级菜单会根据登录状态切换,主菜单将保持原有设置不受影响。

方案二:通过自定义参数判断(更灵活)

如果不确定菜单主题位置,或者需要更精准的控制,可以在调用二级菜单时添加自定义参数。比如将主题中调用二级菜单的代码修改为:

wp_nav_menu( array(
    // 保留你原有的其他参数,如menu_class、container等
    'custom_switch_trigger' => true // 添加这个自定义开关参数
) );

然后调整你的函数代码:

function my_wp_nav_menu_args( $args = '' ) {
    // 检查是否存在自定义开关参数
    if ( isset( $args['custom_switch_trigger'] ) && $args['custom_switch_trigger'] ) {
        if( is_user_logged_in() ) { 
            $args['menu'] = 'logged-in';
        } else { 
            $args['menu'] = 'logged-out';
        }
    }
    return $args;
}
add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );

这种方式无需依赖主题注册的菜单位置,只要调用菜单时添加指定参数,就会触发登录状态的菜单切换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:20