Wordpress Rest-API Endpunkt einrichten

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 */
}

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/<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 */
	}
}