====== Wordpress Rest-API Endpunkt einrichten ======
**AKTUALISIERTE VERSION MIT STATIC CLASS »» ** [[programmieren:wordpress:rest_api_mit_statischer_klasse|]]
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 */
}
}