Endpoint personalizzato di WordPress Rest API con parametro opzionale
È possibile utilizzare register_rest_route()
con parametri opzionali nell'URL?
Supponiamo che la rotta sia registrata in questo modo:
register_rest_route( 'api', '/animals/(?P<id>\d+)', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Ora è possibile effettuare una chiamata API su un URL come /wp-json/api/animals/15, ma c'è un modo per dichiarare il parametro come opzionale per gestire anche una rotta come /wp-json/api/animals/?
Ho anche provato a dichiarare la rotta come mostrato sotto, ma senza successo:
/animals/(?P<id>\d+)?
È possibile dichiarare un'altra rotta senza il parametro o utilizzare i parametri GET, ma esiste un modo per farlo direttamente in register_rest_route()
?
Grazie per i vostri suggerimenti.
Dovresti inserire i parametri nominati della regex della route in un gruppo di cattura opzionale:
register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Il secondo parametro è semplicemente una regex, quindi puoi usare la logica normale delle regex per renderla più complessa

Potrebbe esserci un modo per farlo con una singola chiamata alla funzione register_rest_route
, non so come farlo e sarebbe l'ideale. Tuttavia, duplicare la chiamata alla funzione register_rest_route
nel metodo hook farà ciò che desideri.
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'
],
] );
Nel metodo get_animals dovrai avere delle condizioni che gestiscano ogni caso. Una per se l'argomento id
è impostato, e il fallback che controlla le variabili $_GET
.
