Optionaler Parameter für den benutzerdefinierten Endpunkt der Wordpress Rest API

15

Ist es möglich, register_rest_route()mit optionalen Parametern in URL zu verwenden?

Angenommen, 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 / animal / 15 durchzuführen, aber es gibt eine Möglichkeit, den Parameter als optional zu deklarieren, um auch eine Route wie / wp-json / api / animal / abzufangen .

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 zu tun register_rest_route()?

Vielen Dank für Ihre Vorschläge.

rozklad
quelle

Antworten:

18

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 Regex. Sie können also die normale Regex-Logik verwenden , um ihn komplexer zu gestalten

Nicola Peluchetti
quelle
3

Es kann eine Möglichkeit geben, dies mit einem register_rest_routeFunktionsaufruf zu tun. Ich weiß nicht, wie das geht, und es wäre ideal. Das Duplizieren des register_rest_routeFunktionsaufrufs 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'
    ],
] );

Bei der Methode get_animals möchten Sie Bedingungen haben, die jeden Fall behandeln. Eine, wenn das idArgument gesetzt ist und der Fallback nach $_GETVariablen sucht .

jackreichert
quelle