博客 / WordPress/ WordPress 教程:根据用户登录状态动态切换导航菜单

WordPress 教程:根据用户登录状态动态切换导航菜单

WordPress 如何根据登录状态显示不同菜单

对于允许用户注册的 WordPress 网站(例如会员站、社区或多用户博客),一个常见的需求是:根据访客是否已登录来显示不同的导航菜单。例如,已登录用户应看到“用户中心”、“注销”等链接,而未登录访客则应看到“登录”、“注册”等链接。

实现此功能的核心思路是:创建两个独立的菜单,然后通过代码逻辑,根据用户的登录状态动态切换显示的菜单。

步骤一:创建两个菜单

首先,你需要在 WordPress 后台创建两个菜单。

  1. 进入 外观 > 菜单
  2. 创建一个新菜单,命名为“已登录用户菜单”(或 Logged-in Menu),并为其添加面向已登录用户的链接,如:用户资料页、仪表盘、注销等。
  3. 再创建一个新菜单,命名为“未登录用户菜单”(或 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 文件中进行修改。

高级用法与替代方案

除了上述核心方法,你还可以考虑:

  1. 使用插件:如果不想修改代码,可以搜索安装“Conditional Menus”或“If Menu”这类插件,它们通常提供可视化界面来设置菜单显示条件。
  2. 条件判断菜单项:如果只是少数几个链接需要根据登录状态显示或隐藏,可以考虑使用“CSS 类”或“Nav Menu Roles”等插件来控制单个菜单项的可见性。

完成以上步骤后,保存文件并刷新网站前台。现在,网站就会根据用户的登录状态自动显示对应的导航菜单了。

发表评论

您的邮箱不会公开。必填项已用 * 标注。