web-dev-qa-db-fra.com

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

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

Disons que route est enregistrée 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 telle que/wp-json/api/animals/15 , mais existe-t-il un moyen de déclarer le paramètre param facultatif pour capturer un itinéraire tel que/wp-json/api/animaux/ .

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

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

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

Merci pour vos suggestions.

9
rozklad

Vous devez placer les paramètres nommés de route regex 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 second paramètre est simplement une expression rationnelle, vous pouvez donc utiliser logique de regex normale pour le rendre plus complexe

9
Nicola Peluchetti

Il peut y avoir un moyen de le faire avec un appel de fonction register_rest_route, je ne sais pas comment le faire et il serait serait idéal. Toutefois, la duplication de l'appel de la fonction register_rest_route dans la méthode accroché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'argument id est défini et que le repli vérifie les variables $_GET.

2
jackreichert