web-dev-qa-db-fra.com

WP REST API ne renvoyant qu'une liste partielle d'utilisateurs

A commencé à travailler avec l'API WP REST pour la première fois. Notre objectif ultime est de charger dynamiquement des éléments d'interface utilisateur en fonction de l'utilisateur actuellement connecté. Cependant, ma tentative de tirer une liste de tous les utilisateurs heurte un mur: je ne peux renvoyer que deux utilisateurs sur cinq lors de l'exécution de la base. demande http:

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

J'ai essayé d'inclure d'autres paramètres comme search, mais cela ne fonctionnera que si l'utilisateur que je cherche est l'un des deux dans la réponse que je reçois déjà; il ne renvoie aucune donnée pour les trois autres utilisateurs. En ce qui concerne les profils d'utilisateurs, il n'y a pas de points de données ou de rôles uniques qui différencient les deux utilisateurs renvoyés des trois autres. Les deux renvoyés sont les deux administrateurs, mais il en est de même l'un des trois manquants.

Qu'est-ce qui me manque ??

4
MakeCodeNotWar

Après de nombreuses lectures, j'ai trouvé la raison pour laquelle tous les utilisateurs ne sont pas renvoyés avec la requête HTTP directe pour l'API WP REST:

Ceci est une requête non authentifiée , par conséquent, seules les données des utilisateurs accessibles au public sont publiées dans une requête GET.

*** Il est important de mentionner que si certaines données dont vous avez besoin sont indisponibles, vous devrez probablement ajouter ces champs aux réponses, en utilisant register_api_fields ( voir docs pour un exemple d'utilisation ), aux points de terminaison de vos utilisateurs.

La meilleure ressource que j'ai trouvée, qui m'a donné cette réponse, faisait partie du guide détaillé et facile à lire de l'API WP REST de Torque (voir pages 35 à 38) . Quelqu'un a besoin d'acheter à cet homme beaucoup, beaucoup de bières pour écrire un si bon guide !!

1
MakeCodeNotWar

Je pense que cela dépend des spécificités de ce que vous recherchez, vous pouvez obtenir le maximum de contrôle en rendant votre propre itinéraire difficile, la route des utilisateurs étant plus destinée à répertorier les utilisateurs, pas à les rechercher exactement car il y a une quantité assez folle de choses. vous voudrez peut-être effectuer une recherche à partir de, et cela pourrait être difficile.

Je ne dis pas que cela ne peut pas être fait, je viens de constater personnellement que plutôt que de lutter pour obtenir un itinéraire permettant de suivre votre cas d'utilisation, il est plus facile de créer des itinéraires personnalisés.

Voici un exemple:

// 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
));

puis pour la fonction 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 );
}

Bien sûr, il y en a plus aussi (comme la pagination).

https://github.com/WordPress/WordPress/blob/master/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php vous montrera comment il construit l'itinéraire standard via la fonction get_items. Selon ce que vous souhaitez interroger, il peut également vous indiquer les options dont vous avez besoin (si vous utilisez la route par défaut).

La seule raison pour laquelle je donne une réponse aussi complexe, car elle pourrait vous aider à comprendre comment cela fonctionne et quelle application de l'API REST pourrait répondre à vos besoins.

3
Jordan Ramstad