This is an old revision of the document!


Eigener Wordpress Rest API Endpoint mit Static Class

<?php
namespace theme\wp_rest;
use WP_REST_Request;
 
/**=============================================
 * REST API ENDPOINT
 * =============================================
 * 
 * Eigener Rest-Endpoint damit eine komplett 
 * eigene JSON Ausgabe erzeugt werden kann
 * 
 * Dokumentation:
 * @link https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
 */
add_action( 'rest_api_init', [ 'theme\wp_rest\RestAPIContactForm', 'register_route' ] );
final class RestAPIContactForm
{
	/*
		GET /wp-json/theme/v1/contact-form
	*/
	public static $rest_namespace       = 'theme/v1';
	public static $rest_route           = 'contact-form/';
	public static $send_methods         = [ 'POST', 'GET'];
	public static $rest_callback        = [ 'theme\wp_rest\RestAPIContactForm', 'rest_response' ];
 
	private static $flush_rewrite_rules = true; // Zum Debuggen
 
 
	/**---------------------------------------------
	 * Register Rest Route
	 * ---------------------------------------------
	 * 
	 * Fügt die neue Route
	 * 
	 * @return void
	 */
	public static function register_route()
	{
		$route_args = [
			'methods'             => self::$send_methods,
			'callback'            => self::$rest_callback,
			'permission_callback' => '__return_true',
		];
		register_rest_route( self::$rest_namespace, self::$rest_route, $route_args );
 
		if( self::$flush_rewrite_rules ){ self::flush_rewrite_rules(); }
	}
 
 
	/**---------------------------------------------
	 * Render Response
	 * ---------------------------------------------
	 * 
	 * Handled den Request und gibt eine Ausgabe
	 * zurück. Ausgabe sollte ein Array sein.
	 * Das Array wird automatisch von WP in ein
	 * JSON umgewandelt.
	 * 
	 * @return void
	 */
	public static function rest_response( WP_REST_Request $request ):array
	{
		return [
			'message' => 'funktioniert',
			'request' => $request,
		];
	}
 
 
	/**---------------------------------------------
	 * Flush aller Rewrite Rules
	 * ---------------------------------------------
	 * 
	 * Sollte nur in Dev gemacht werden zum Testen.
	 * In Produktion nicht mehr ausführen.
	 * 
	 * @return void
	 */
	private static function flush_rewrite_rules()
	{
		$hard_flush = true;
		flush_rewrite_rules( $hard_flush );
	}
}

Page Tools