Endpoint personalizzato di WordPress Rest API con parametro opzionale

26 gen 2017, 15:52:26
Visualizzazioni: 25.4K
Voti: 24

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

0
Tutte le risposte alla domanda 2
0
37

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

20 mar 2018 23:26:30
0

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.

25 giu 2017 22:59:17