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

自定义WordPress BuddyPress API端点返回空响应如何排查

问题排查与解决方案

核心问题原因

你代码的核心问题是路由参数名和取值键名不匹配:
你在register_rest_route中定义路径参数的捕获规则是(?P<id>\d+),这意味着REST请求传入的参数会被存到$data['id']中,但你在favourite_members函数里错误地读取了不存在的$data['user_id'],导致传入SQL的用户ID为空,自然查询不到结果。

修正后的完整代码

/*** Grab favourite members for a specified user ***/
function favourite_members( $data ) {
  // 正确读取路由中定义的id参数
  $favourites = get_favourite_members(array(
    'user_id' => $data['id'],
  ) );

  if ( empty( $favourites ) ) {
    // 按WordPress REST规范返回标准错误,便于前端处理
    return new WP_Error( 'no_favourites', '该用户暂无收藏成员', array( 'status' => 404 ) );
  }

  return $favourites;
}

function get_favourite_members( $data ){
  global $wpdb;
  // 动态获取表前缀,适配不同站点的自定义前缀配置
  $table_name = $wpdb->prefix . 'my_favourite_members';
  $sql = $wpdb->prepare( "SELECT member_id FROM {$table_name} WHERE user_id = %d", $data['user_id'] );
  return $wpdb->get_results( $sql );
}

/*** Register register_rest_route ***/
add_action( 'rest_api_init', function () {
  register_rest_route( 'myapi/v1', '/favouritemembers/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'favourite_members',
    // 参数合法性校验
    'args' => array(
      'id' => array(
        'validate_callback' => function($param) {
          return is_numeric( $param );
        },
        'required' => true
      )
    ),
    // 权限校验,可根据业务需求调整,允许公开访问可直接返回true
    'permission_callback' => function () {
      return current_user_can( 'read' );
    }
  ) );
} );

额外优化说明

  • 移除了硬编码的表前缀wp_,改用$wpdb->prefix动态获取,兼容不同WordPress站点的自定义表前缀配置
  • 新增参数校验逻辑,拦截非法格式的ID请求
  • 空查询结果按WordPress REST API规范返回标准错误对象,而非null,更便于前端统一处理响应
  • 新增权限校验位,可根据业务需求调整是否需要登录、是否有权限查看对应用户的收藏列表

内容的提问来源于stack exchange,提问作者KDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:06:05