Paramètre facultatif de point de terminaison personnalisé Wordpress Rest API

15

Est-il possible d'utiliser register_rest_route()avec des paramètres optionnels dans l'URL?

Disons que l'itinéraire est enregistré de cette façon:

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

Il est maintenant possible d'effectuer un appel api sur une URL comme / wp-json / api / animals / 15 , mais existe-t-il un moyen de déclarer le paramètre comme facultatif pour capturer également une route comme / wp-json / api / animals / .

J'ai également essayé de déclarer l'itinéraire comme ci-dessous, mais sans succès:

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

Vous pouvez déclarer un autre itinéraire sans le paramètre ou utiliser les paramètres GET, mais existe-t-il un moyen de le faire déjà dans le register_rest_route()?

Merci pour vos suggestions.

rozklad
la source

Réponses:

18

Vous devez placer les paramètres nommés de l'expression régulière de la route dans un groupe de capture facultatif:

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

Le deuxième paramètre est simplement une expression régulière, vous pouvez donc utiliser une logique d'expression régulière normale pour la rendre plus complexe

Nicola Peluchetti
la source
3

Il peut y avoir un moyen de le faire avec un register_rest_routeappel de fonction, je ne sais pas comment faire et ce serait idéal. Cependant, la duplication de l' register_rest_routeappel de fonction dans la méthode hookée fera ce que vous voulez.

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

C'est la méthode get_animals que vous voudrez avoir des conditions qui gèrent chaque cas. Un pour si l' idargument est défini et le repli vérifie les $_GETvariables.

jackreichert
la source