Wordpress Rest API niestandardowy punkt końcowy opcjonalny parametr

15

Czy można używać register_rest_route()z opcjonalnymi parametrami w adresie URL?

Powiedzmy, że trasa jest rejestrowana w ten sposób:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Możliwe jest teraz wykonywanie wywołania interfejsu API na adresie URL, takim jak / wp-json / api / animals / 15 , ale istnieje sposób, aby zadeklarować parametr jako opcjonalny, aby przechwycić trasę jak / wp-json / api / animals / .

Próbowałem też zadeklarować trasę jak poniżej, ale bezskutecznie:

/animals/(?P<id>\d+)?

Możesz zadeklarować inną trasę bez parametrów lub użyć parametrów GET, ale czy istnieje sposób, aby to zrobić już w register_rest_route()?

Dziękuję za twoje sugestie.

rozklad
źródło

Odpowiedzi:

18

Powinieneś umieścić nazwane parametry wyrażenia regularnego trasy w opcjonalnej grupie przechwytywania:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Drugi parametr jest po prostu wyrażeniem regularnym, więc możesz użyć normalnej logiki wyrażenia regularnego, aby uczynić go bardziej złożonym

Nicola Peluchetti
źródło
3

Może istnieć sposób, aby to zrobić za pomocą jednego register_rest_routewywołania funkcji, nie wiem jak to zrobić i byłoby idealnie. Jednak powielenie register_rest_routewywołania funkcji w metodzie zaczepionej zrobi to, co chcesz.

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'
    ],
] );

W metodzie get_animals będziesz chciał mieć warunki, które będą obsługiwać każdą sprawę. Jeden dla, jeśli idustawiony jest argument, a funkcja rezerwowa sprawdza $_GETzmienne.

jackreichert
źródło