BuddyPress 用户主页下的所有页面仅对已登录用户可见
› 社区话题 › BuddyPress开发(BuddyPress Development) › 未登录用户访问 BuddyPress 的好友页时被重定向到登录页 › BuddyPress 用户主页下的所有页面仅对已登录用户可见
2025年7月10日 - 下午11:36 #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;
}
}如有进一步权限控制需求(例如仅好友可见),也可以在此基础上扩展权限判断逻辑。