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.
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
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
.