AKTUALISIERTE VERSION MIT STATIC CLASS »» Eigener Wordpress Rest API Endpoint mit Static Class
Mit diesem Script kann ein neuer Rest-API Endpunkt eingerichtet werden, der dann über die Website URL aufrufbar ist. In diesem Beispiel wird ein News Endpunkt erstellt, alles nur fiktiv, aber es zeigt wie man es macht.
<?php /* Eigener Endpoint damit eine komplett eigeneJSON Ausgabe erzeugt werden kann Doku : https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/ */ /* REST URL : http://localhost:8888/wp-json/mein-namespace/v1/items/<TYPE:string>/<LEVEL:integer> */ add_action( 'rest_api_init', 'register_news_endpoint' ); function register_news_endpoint(){ // http://localhost:8888/wp-json/mein-namespace/v1/items/<TYPE:string>/<ID:integer> // ohne Slash am Anfang und Ende $namespace = 'mein-namespace/v1'; /* type => string aus klein Großbuchsten, Zahlen & -, sowie _ */ /* ID => integer Zahl */ $route = 'items/(?P<type>[a-zA-Z0-9-_]+)/(?P<id>\d+)/'; $args = [ 'methods' => 'GET', 'callback' => 'render_rest_item_endpoint', 'permission_callback' => '__return_true', ]; register_rest_route( $namespace, $route, $args ); } /** * * * */ function render_rest_item_endpoint( $request ) { /* WP codiert selbst alles im "Return" als JSON. Alles was davor ausgegeben wird, taucht 1:1 so im Browser auf */ $type = $request['type']; $ID = $request['id']; $return_array = [ 'type' => $type, 'ID' => $ID, ]; return $return_array; /* <- wird automatisch in JSON umgewandelt */ }
Es ist sinnvoll die Registrierung der REST-API Route in Wordpress in eine eigene Klasse zu packen. Man verhindert Namenskonflikte, schafft mehr Übersichtlichkeit und hat insgesamt bessere Code-Qualität.
/** * */ class CreateTrackingPoint { function __construct() { add_action( 'rest_api_init', [ $this, 'register_endpoint'] ); } public function register_endpoint() { // /wp-json/moewe-tracking/v1/tracking_create/<USER_ID:integer>/<EVENT_TYPE:string> $namespace = 'moewe-tracking/v1'; // ohne Slash am Anfang und Ende $route = 'tracking_create/(?P<user_id>\d+)/(?P<event_type>[a-zA-Z0-9-_]+)/'; $args = [ 'methods' => 'GET', 'callback' => [ $this, 'render_endpoint' ], 'permission_callback' => '__return_true', ]; register_rest_route( $namespace, $route, $args ); } public function render_endpoint( $request ) { $user_id = $request['user_id']; $event_type = $request['event_type']; $return_array = [ 'user_id' => $user_id, 'event_type' => $event_type, ]; return $return_array; /* <- wird automatisch in JSON umgewandelt */ } }