如何在BuddyPress搜索用户资料时强制用户登录/注册
解决BuddyPress游客搜索用户资料跳转登录/注册的问题
你的代码未生效主要有三个问题:语法错误、钩子使用不当、条件判断未覆盖搜索场景,以下是修正方案:
原代码问题分析
- 语法错误:
wp_redirect( home_url("/register/");缺少闭合括号,且未添加exit;终止后续代码执行,导致跳转逻辑失效 - 钩子错误:
get_header是用于修改header内容的过滤器,跳转操作应该使用template_redirect动作钩子,这是WordPress标准的页面跳转触发点 - 条件不全:原代码仅判断了成员目录首页,未覆盖带有搜索参数的结果页,无法拦截搜索行为
修正后的代码
function bp_guest_redirect_search() { global $bp; // 仅针对成员目录(含搜索结果页)生效 if ( bp_is_members_directory() ) { // 检测是否存在搜索参数(通用搜索关键词或自定义字段搜索) $is_searching = !empty( $_GET['s'] ) || !empty( $_GET['field_'] ); // 未登录且处于搜索状态时跳转 if ( !is_user_logged_in() && $is_searching ) { wp_redirect( home_url( '/register/' ) ); exit; // 必须添加,阻止页面继续加载 } } } add_action( 'template_redirect', 'bp_guest_redirect_search', 10 );
额外说明
- 若需要拦截所有成员目录访问(不仅是搜索),可删除
$is_searching的判断,直接在bp_is_members_directory()且未登录时跳转 - 自定义字段搜索的参数格式为
field_{字段ID}(比如性别字段ID为3,参数就是field_3),如果需要精准匹配特定字段,可修改$is_searching的判断条件,例如!empty( $_GET['field_3'] ) - 请确保你的注册页slug是
register,如果需要跳转至登录页,替换为home_url( '/login/' )
内容的提问来源于stack exchange,提问作者Manish Agarwal
相关产品推荐
相关产品推荐

