BuddyPress 用户主页下的所有页面仅对已登录用户可见

社区话题 BuddyPress开发(BuddyPress Development) 未登录用户访问 BuddyPress 的好友页时被重定向到登录页 BuddyPress 用户主页下的所有页面仅对已登录用户可见

#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;
    }
}

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