web-dev-qa-db-ja.com

WP REST 一部のユーザーリストのみを返すAPI

WP REST AP​​Iの使用を初めて開始しました。私たちの究極の目標は、現在ログインしているユーザーに基づいてUI要素を動的にロードすることです。ただし、私が全ユーザーのリストを取得しようとすると、壁にぶつかります。 httpリクエスト:

http://portal.alliedbuildings.com/wp-json/wp/v2/users

私はsearchのような他のパラメータを含めようとしましたが、それは私が探しているユーザーがすでに得ている応答の中の2つのうちの1つである場合にのみ機能します。他の3人のユーザーに関するデータはまったく返されません。ユーザープロファイルを見ると、2人のユーザーを他の3人から区別して設定するための固有のデータポイントや役割はありません。返される2つは両方とも管理者ですが、不足している3つのうちの1つです。

私は何が欠けているのですか?

4
MakeCodeNotWar

よく読んで、すべてのユーザーがWP REST AP​​Iに対する単純なHTTPリクエストで返されない理由を見つけました。

これは 認証されていない 要求であるため、公に利用可能なユーザーデータのみがGET要求で解放されます。

*** 必要なデータが利用できない場合は、register_api_fields使用法 などのdocsを参照)を使用して、これらのフィールドをレスポンスにユーザーエンドポイントに追加する必要があります。

私がこの答えを与えてくれた私が見つけた最高のリソースは、Torqueからの WP REST AP​​Iに関する詳細で読みやすいガイドの一部でした(35 - ページを見てください) 38) 誰かがそのような素晴らしいガイドを書くためにその男を買う必要があります。

1
MakeCodeNotWar

私はそれがあなたが探しているものの詳細に依存すると思います、あなたはあなた自身のルートを厳しくすることによってあなたが最もコントロールを得ることができます。あなたはに基づいて検索したいと思うかもしれません、そしてすべてのパラメータを通してそれをすることは困難になるかもしれません。

それができないと言っているのではなく、自分のユースケースに従うためのルートを取得するために戦うほうが、カスタムルートを作成する方が簡単であることを個人的に発見しただけです。

これが一例です。

// namespace is like app/v1 rather then wp/v2
register_rest_route($namespace, '/users', array(
    'methods'             => WP_REST_Server::READABLE,
    'callback'            => 'get_user_list',
    'show_in_rest' => true
));

それから関数get_user_listのために

function get_user_list($request) {
   //below you can change to a WQ_Query and customized it to ensure the list is exactly what you need
   $results = get_users();

   //Using the default controller to ensure the response follows the same structure as the default route
   $users = array();
   $controller = new WP_REST_Users_Controller();
   foreach ( $results as $user ) {
        $data    = $controller->prepare_item_for_response( $user, $request );
        $users[] = $controller->prepare_response_for_collection( $data );
    }

   return rest_ensure_response( $users );
}

もちろん、それ以上のものもあります(ページネーションのように)。

https://github.com/WordPress/WordPress/blob/master/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php に標準ルートの構築方法が表示されますget_items関数を通じて。何を照会したいかによっては、照会する必要があるオプションも示される可能性があります(デフォルト経路を使用している場合)。

私がそのような複雑な答えを与えている唯一の理由は、それがあなたがそれをどのように機能するかそしてREST AP​​Iのどんなアプリケーションがあなたのニーズを満たすかもしれないかについて学ぶのを助けることができるので。

3
Jordan Ramstad