Jede WordPress Webseite verfügt standardmässig über eine API Schnittstelle. Diese ist dynamisch erweiterbar über beispielsweise ein Plugin oder Theme. Mit jedem neu hinzugefügten Endpunkt kann somit eine Funktion ausgeführt und ein Wert ausgegeben werden.
Wofür WordPress REST API
Die bereits bestehende REST API eignet sich beispielsweise bestens um Custom Post Types auszulesen, mit allen darin befindlichen Beiträgen. Filtermöglichkeiten bestehen ebenfalls via URL.
Um auf die Übersicht der API Schnittstelle zu gelangen, sieht der URL Aufruf wie folgt aus: https://tschaki.com/wp-json/
In diesem Post behandeln wir die dynamische Erweiterung der Schnittstelle mit POST
und GET
Requests.
Neuer API Endpunkt für POST hinzufügen
Wird ein neuer Endpunkt via POST
definiert, kann dieser nicht als beispielsweise GET
abgerufen werden. Dies würde in einem 404-Fehler resultieren. POST
eignet sich hervorragend um Nutzerdaten versteckt an die API zu übermitteln. Callback eignet sich bestens, um weitere Funktionen zu platzieren. Beispielsweise bei Verwendung für Datenbank-Einträge.
// Register new WP REST API Endpoint. add_action( 'rest_api_init', function ( ) { register_rest_route( 'namespace', 'apicall', array( 'methods' => 'POST', 'callback' => 'api_call' ) ); } ); // Callback for new API Endpoint Call. function api_call( WP_REST_Request $request ) { $request_params = $request->get_params( ); return $request_params['param']; // returns "sended_param" on success. }
Weitergegebene POST Variablen durch jQuery Ajax sind als Parameter im Callback auszulesen. Diese sind in einem Objekt angelegt.
In diesem Beispiel Javascript jQuery Snippet kann der neue WordPress API Endpunkt über ein Ajax Request aufgerufen werden.
jQuery.ajax({ method: "POST", timeout: 5000, async: true, url: "/wp-json/namespace/apicall", data: {param: 'sended_param'}, error: function() { console.log( "failed" ); } }).done(function ( msg ) { // Maybe markup manipulation. });
Neuer API Endpunkt für GET hinzufügen
Als GET
Endpunkt fällt lediglich die Möglichkeit weg, ein jQuery data: {}
Object anzuhängen.
// Register new WP REST API Endpoint. add_action( 'rest_api_init', function ( ) { register_rest_route( 'namespace', 'apicall', array( 'methods' => 'GET', 'callback' => 'api_call' ) ); } ); // Callback for new API Endpoint Call. function api_call( ) { return true; // returns "true" on success. }
Auch in diesem Fall muss der WordPress REST API Endpunkt als GET
aufgerufen werden. Als POST
resultiert dieser in Code 404.
jQuery.ajax({ method: "GET", timeout: 5000, async: true, url: "/wp-json/namespace/apicall", error: function() { console.log( "failed" ); } }).done(function ( msg ) { // Maybe markup manipulation. });
Quelle: WordPress Codex
Kommentieren