Ist es möglich, register_rest_route()
mit optionalen Parametern in der URL zu verwenden?
Nehmen wir an, die Route wird folgendermaßen registriert:
register_rest_route( 'api', '/animals/(?P<id>\d+)', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Es ist jetzt möglich, einen API-Aufruf für eine URL wie/wp-json/api/animals/15 durchzuführen, aber es gibt eine Möglichkeit, den Parameter als optional zu deklarieren, um auch eine Route wie/wp-json/api/zu fangen. Tiere/ .
Ich habe auch versucht, die Route wie folgt zu deklarieren, aber ohne Erfolg:
/animals/(?P<id>\d+)?
Sie können eine andere Route ohne den Parameter deklarieren oder GET-Parameter verwenden. Gibt es eine Möglichkeit, dies bereits in der Funktion register_rest_route()
zu tun?
Vielen Dank für Ihre Anregungen.
Sie sollten die benannten Parameter des Routen-Regex in eine optionale Erfassungsgruppe einfügen:
register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Der zweite Parameter ist einfach ein regulärer Ausdruck. Daher können Sie normale reguläre Ausdrücke verwenden, um die Komplexität zu erhöhen
Es kann eine Möglichkeit geben, dies mit einem register_rest_route
Funktionsaufruf zu tun. Ich weiß nicht, wie das geht, und es wäreideal. Das Duplizieren des Funktionsaufrufs register_rest_route
in der Hook-Methode macht jedoch das, was Sie wollen.
register_rest_route( 'api', '/animals/', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals'
] );
register_rest_route( 'api', '/animals/(?P<id>\d+)', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Mit der Methode get_animals möchten Sie Bedingungen haben, die den jeweiligen Fall behandeln. Eine, wenn das Argument id
gesetzt ist und der Fallback nach $_GET
-Variablen sucht.