WordPress Astra主题设置登录/登出用户不同头部菜单且不影响底部菜单
问题原因
你当前使用的wp_nav_menu_args过滤器未限制作用范围,会全局作用于站点所有导航菜单,因此底部菜单也被强制替换为了头部的登录态匹配菜单。
修复方案
Astra主题默认的头部主菜单有单独的位置标识primary,只需要在过滤逻辑中新增位置判断,仅修改对应头部菜单的配置即可,修改后代码如下:
function wpc_wp_nav_menu_args( $args = '' ) { // 仅匹配Astra头部主菜单的位置标识,不对其他菜单生效 if ( $args['theme_location'] === 'primary' ) { if( is_user_logged_in() ) { // 注:原代码逻辑为登录用户显示logged-out菜单,若不符合需求可自行调整为登录后对应的菜单名 $args['menu'] = 'logged-out'; } else { $args['menu'] = 'Main Menu'; } } return $args; } add_filter( 'wp_nav_menu_args', 'wpc_wp_nav_menu_args' );
如果你的头部菜单使用的不是默认的主菜单位置,可以进入 WordPress 后台「外观-菜单」页面,切换到「管理位置」标签,查看头部菜单对应的位置标识,替换代码中的primary即可。
其他可选方案
如果不想写代码,也可以安装支持菜单按登录状态显示的WordPress扩展插件,在后台可视化设置每个菜单项的可见范围,不需要修改主题文件。
提示:修改主题functions.php前建议提前备份文件,优先使用子主题的functions.php存放自定义代码,避免主题更新后自定义代码被覆盖。
内容的提问来源于stack exchange,提问作者Wonderweis
相关产品推荐
相关产品推荐

