未登录用户访问 BuddyPress 的好友页时被重定向到登录页
› VFX大学 › 👥 BuddyPress开发(BuddyPress Development) › 未登录用户访问 BuddyPress 的好友页时被重定向到登录页
标签: buddypress
- This topic has 1 个回复, 1 个参与人, and was last updated 20 小时, 27 分 前 by
追光.
- 作者帖子
- 2025年7月10日 - 下午11:31 #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 参数即可,无需更改上方逻辑。
- 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; } }
如有进一步权限控制需求(例如仅好友可见),也可以在此基础上扩展权限判断逻辑。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。