WordPress 如何根据登录状态显示不同菜单
对于允许用户注册的 WordPress 网站(例如会员站、社区或多用户博客),一个常见的需求是:根据访客是否已登录来显示不同的导航菜单。例如,已登录用户应看到“用户中心”、“注销”等链接,而未登录访客则应看到“登录”、“注册”等链接。
实现此功能的核心思路是:创建两个独立的菜单,然后通过代码逻辑,根据用户的登录状态动态切换显示的菜单。
步骤一:创建两个菜单
首先,你需要在 WordPress 后台创建两个菜单。
- 进入 外观 > 菜单。
- 创建一个新菜单,命名为“已登录用户菜单”(或 Logged-in Menu),并为其添加面向已登录用户的链接,如:用户资料页、仪表盘、注销等。
- 再创建一个新菜单,命名为“未登录用户菜单”(或 Logged-out Menu),并为其添加面向访客的链接,如:登录、注册、关于我们等。
注意:请准确记录你为这两个菜单设置的名称(即“菜单名称”),后续代码中需要用到。
步骤二:添加功能代码
接下来,将以下代码添加到当前主题的 functions.php 文件末尾。
/**
* 根据用户登录状态切换导航菜单
* @param array $args wp_nav_menu() 函数的参数数组
* @return array 修改后的参数数组
*/
function wpdocs_switch_menu_based_on_login( $args ) {
// 判断用户是否已登录
if ( is_user_logged_in() ) {
// 已登录用户:显示名为“已登录用户菜单”的菜单
$args["menu"] = "已登录用户菜单";
} else {
// 未登录访客:显示名为“未登录用户菜单”的菜单
$args["menu"] = "未登录用户菜单";
}
return $args;
}
add_filter( "wp_nav_menu_args", "wpdocs_switch_menu_based_on_login" );
代码说明与注意事项
- 函数逻辑:代码通过
is_user_logged_in()函数判断用户状态,并相应修改wp_nav_menu()函数的menu参数,指定要显示的菜单名称。 - 关键修改:你必须将代码中的菜单名称
"已登录用户菜单"和"未登录用户菜单"替换为你在步骤一中实际创建的菜单名称。 - 菜单位置:此代码会作用于网站上所有通过
wp_nav_menu()调用的菜单。如果你只想针对特定的菜单位置(如“主菜单”)生效,可以在条件判断中加入对$args["theme_location"]的检查。 - 子主题:为避免主题更新时代码丢失,强烈建议在子主题的
functions.php文件中进行修改。
高级用法与替代方案
除了上述核心方法,你还可以考虑:
- 使用插件:如果不想修改代码,可以搜索安装“Conditional Menus”或“If Menu”这类插件,它们通常提供可视化界面来设置菜单显示条件。
- 条件判断菜单项:如果只是少数几个链接需要根据登录状态显示或隐藏,可以考虑使用“CSS 类”或“Nav Menu Roles”等插件来控制单个菜单项的可见性。
完成以上步骤后,保存文件并刷新网站前台。现在,网站就会根据用户的登录状态自动显示对应的导航菜单了。