webentwicklung-frage-antwort-db.com.de

Optionaler Parameter für benutzerdefinierten Endpunkt der Wordpress Rest API

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.

9
rozklad

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

9

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.

2
jackreichert