猿问

在自定义路由中使用 register_rest_field

我目前正在尝试创建一个用于创建应用程序的 API 为此,我需要一个自定义端点,该端点只能从已登录的用户访问,目前使用以下代码完成:


register_rest_route( 'wp/v2', 'private/me',array(

            'methods'  =>  WP_REST_Server::READABLE,

            'callback' => 'get_private'

));



function get_private($request) {


      $user = (array) wp_get_current_user();

      $user["data"] = (array) $user["data"];

      unset($user['data']['user_pass']);

      // $user = get_user_by('id', 13);

      if (empty($user)) {

            return new WP_Error( 'empty_category', 'there is no post in this category', array('status' => 404) );


      }


      $response = new WP_REST_Response($user['data']);

      $response->set_status(200);


      return $response;

}

目前它返回一个没有'user_pass'的用户对象


然后,当我使用“register_rest_field”函数时,我什么也得不到(如果在任何默认 api 用户端点上设置,该函数就可以工作


register_rest_field('private/me',

    'rank_number',

    array(

      'get_callback'      =>  'get_rank_number',

      'update_callback'   =>  null,

      'schema'            =>  null

    )

  );

function get_rank_number ( $user ) {

  return (int) get_user_meta($user['id'], 'ck_user_ranking_score_number', true);

}

问题是,我不知道如何让路线读取已注册休息字段的列表,也不知道是否应该这样做


目前,我正在尝试通过扩展 WP_REST_Controller 类来实现它,因为它看起来可以工作


有人可以帮助我了解 API 的工作原理或应该如何使用它吗?:/


函数式编程
浏览 106回答 1
1回答

慕少森

如果有人遇到同样的问题,wordpress 用户在他们的论坛上回答了我的帖子,解决方案: var $wp_rest_additional_fields,我在文档中找不到任何关于它的内容,但至少 var 确实存在于全局范围内因此,使用此代码一切正常global $wp_rest_additional_fields;foreach($wp_rest_additional_fields['private/me'] as $key => $value){      $user_data[$key] = call_user_func($value['get_callback'], $user['data']);    }
随时随地看视频慕课网APP
我要回答