====== Wordpress Rest-API Endpunkt einrichten ====== 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. / */ add_action( 'rest_api_init', 'register_news_endpoint' ); function register_news_endpoint(){ // http://localhost:8888/wp-json/mein-namespace/v1/items// // ohne Slash am Anfang und Ende $namespace = 'mein-namespace/v1'; /* type => string aus klein Großbuchsten, Zahlen & -, sowie _ */ /* ID => integer Zahl */ $route = 'items/(?P[a-zA-Z0-9-_]+)/(?P\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 */ } ===== Alternative Schreibweise als Klasse/Objekt ===== 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// $namespace = 'moewe-tracking/v1'; // ohne Slash am Anfang und Ende $route = 'tracking_create/(?P\d+)/(?P[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 */ } }