wake-up-neo.com

WP REST API, die nur eine unvollständige Liste von Benutzern zurückgibt

Begann zum ersten Mal mit der WP REST-API zu arbeiten. Unser ultimatives Ziel ist es, Benutzeroberflächenelemente dynamisch zu laden, basierend auf dem derzeit angemeldeten Benutzer. Meine Versuche, eine Liste aller Benutzer zu erstellen, stoßen jedoch an eine Wand. Ich kann nur zwei von fünf Benutzern zurückgeben, wenn ich die Basis ausführe http Anfrage:

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

Ich habe versucht, andere Parameter wie search einzuschließen, aber das funktioniert nur, wenn der gesuchte Benutzer einer der beiden in der Antwort ist, die ich bereits erhalte. Es werden keinerlei Daten für die anderen drei Benutzer zurückgegeben. In den Benutzerprofilen gibt es keine eindeutigen Datenpunkte oder Rollen, die die beiden zurückgegebenen Benutzer von den anderen drei unterscheiden. Die beiden zurückgegebenen Administratoren sind beide, aber einer der drei fehlt.

Was um alles in der Welt vermisse ich?

4
MakeCodeNotWar

Nach langem Lesen habe ich den Grund gefunden, warum nicht alle Benutzer mit der direkten HTTP-Anforderung für die WP REST-API zurückgegeben werden:

Dies ist eine nicht authentifizierte Anforderung, daher werden nur öffentlich verfügbare Benutzerdaten in einer GET-Anforderung freigegeben.

*** Es ist wichtig zu erwähnen, dass Sie, wenn einige der von Ihnen benötigten Daten nicht verfügbar sind, diese Felder wahrscheinlich auch Ihren Benutzerendpunkten mithilfe von register_api_fields ( siehe Dokumentation zum Beispiel usage ) zu den Antworten hinzufügen müssen.

Die beste Ressource, die ich gefunden habe und die mir diese Antwort gab, war Teil des detaillierten und leicht zu lesenden Handbuchs auf der API WPREST von Torque (siehe Seite 35). 38) . Jemand muss diesem Mann viele, viele Biere kaufen, um einen so tollen Führer zu schreiben !!

1
MakeCodeNotWar

Ich denke, es hängt von den Einzelheiten ab, wonach Sie suchen. Sie können die meiste Kontrolle erlangen, indem Sie Ihre eigene Route schwierig gestalten. Die Benutzerroute ist eher dazu gedacht, Benutzer aufzulisten, nicht genau nach ihnen zu suchen, da es eine verrückte Menge an Dingen gibt Möglicherweise möchten Sie eine Suche basierend auf ausführen, und dies über alle Parameter hinweg zu tun, kann schwierig werden.

Ich sage nicht, dass dies nicht möglich ist. Ich habe nur persönlich festgestellt, dass es einfacher ist, benutzerdefinierte Routen zu erstellen, als darum zu kämpfen, eine Route zu finden, die Ihrem Anwendungsfall folgt.

Hier ist ein Beispiel:

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

dann für die Funktion 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 );
}

Natürlich gibt es auch mehr (wie Paginierung).

https://github.com/WordPress/WordPress/blob/master/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php zeigt Ihnen, wie die Standardroute erstellt wird durch die get_items Funktion. Je nachdem, was Sie abfragen möchten, können Sie auch angeben, mit welchen Optionen Sie abfragen möchten (wenn Sie die Standardroute verwenden).

Der einzige Grund, warum ich eine so komplizierte Antwort gebe, ist, dass Sie lernen können, wie es funktioniert und welche Anwendung der REST -API Ihren Anforderungen entspricht.

3
Jordan Ramstad