未登录用户访问 BuddyPress 的好友页时被重定向到登录页

VFX大学 👥 BuddyPress开发(BuddyPress Development) 未登录用户访问 BuddyPress 的好友页时被重定向到登录页

标签: 

正在查看 1 条回复
  • 作者
    帖子
    • #414

      追光
      管理员

      要实现 未登录用户访问 BuddyPress 的好友页时被重定向到登录页,并在登录后跳回该好友页,可以使用如下方法完成:


      ✅ 实现代码(放入主题

      functions.php

      或自定义插件)

      add_action('bp_actions', function() {
          // 如果未登录 且 正在访问 friends 页面
          if (!is_user_logged_in() && bp_is_current_component('friends')) {
              // 获取当前完整 URL
              $redirect_url = bp_get_requested_url();
      
              // 跳转到登录页,登录后跳回当前页面
              wp_redirect(wp_login_url($redirect_url));
              exit;
          }
      });

      🔍 功能说明:

      部分

      说明

      bp_actions

      BuddyPress 在处理 URL 路由时触发的钩子

      bp_is_current_component(‘friends’)

      判断当前是否访问的是好友板块(/members/username/friends)

      bp_get_requested_url()

      获取当前完整访问 URL,作为登录后的跳转目标

      wp_login_url($redirect_url)

      自动附带 redirect_to 参数的登录页链接

      wp_redirect(…)

      将用户跳转到登录页

      exit;

      停止后续处理,避免多次重定向


      🎯 最终效果:

      • 未登录访问 /members/xxx/friends 会被跳转至登录页

      • 登录成功后将自动跳转回原好友页面

      • 支持任意子页面或参数,确保体验连贯自然


      如你还使用了自定义登录插件(如 Theme My Login),只需确保该插件能识别 redirect_to 参数即可,无需更改上方逻辑。

    • #416

      追光
      管理员

      要让 BuddyPress 用户个人主页下的所有子页面(如:活动、好友、资料、消息等)仅对已登录用户可见,并在未登录时自动重定向到登录页,登录后跳回原来页面,可以使用以下代码实现。


      ✅ 实现代码(放入主题的

      functions.php

      或自定义插件中):

      add_action('bp_actions', function() {
          // 如果未登录 且访问的是用户目录下的任意子页面
          if (!is_user_logged_in() && bp_is_user()) {
              // 获取当前完整 URL
              $redirect_url = bp_get_requested_url();
      
              // 跳转到登录页并设置登录后跳回
              wp_redirect(wp_login_url($redirect_url));
              exit;
          }
      });

      🔍 功能说明:

      项目

      说明

      bp_actions

      BuddyPress 页面处理的核心钩子,用于在加载前做拦截

      bp_is_user()

      判断是否正在访问某个用户的个人主页(包括其下属子页面)

      is_user_logged_in()

      检查当前用户是否已登录

      bp_get_requested_url()

      获取当前访问的完整 URL(包含 /members/用户名/… 路径)

      wp_login_url($redirect_url)

      登录后自动跳转回该页面


      🎯 效果示例:

      • 访客访问:

        • /members/用户名/

        • /members/用户名/activity/

        • /members/用户名/friends/

        • /members/用户名/messages/

      • 将自动跳转到登录页

      • 登录成功后自动跳回原始页面


      ✅ 可选增强:排除公共页面(如

      /members/

      总目录)

      如果你只想保护个人页面,而允许 /members/ 目录(用户列表)公开访问,可增加判断:

      if (!is_user_logged_in() && bp_is_user()) {
          // 排除用户列表页面
          if (!bp_is_directory()) {
              wp_redirect(wp_login_url(bp_get_requested_url()));
              exit;
          }
      }

      如有进一步权限控制需求(例如仅好友可见),也可以在此基础上扩展权限判断逻辑。

正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。