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
相关产品推荐
相关产品推荐

