You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:35:05