Endpoint personalizat Wordpress Rest API cu parametru opțional
Este posibil să folosești register_rest_route()
cu parametri opționali în url?
Să zicem că ruta este înregistrată în acest fel:
register_rest_route( 'api', '/animals/(?P<id>\d+)', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
În prezent este posibil să efectuezi un apel API pe un URL de tipul /wp-json/api/animals/15, dar există o modalitate de a declara parametrul ca fiind opțional pentru a gestiona și rute de tipul /wp-json/api/animals/?
Am încercat să declar ruta și în modul următor, dar fără succes:
/animals/(?P<id>\d+)?
Poți declara o altă rută fără parametru sau utiliza parametri GET, dar există o modalitate de a face acest lucru direct în register_rest_route()
?
Mulțumesc pentru sugestii.

Ar trebui să plasați parametrii numiți ai regex-ului rutei într-un grup de captură opțional:
register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'get_animals',
'args' => [
'id'
],
] );
Al doilea parametru este pur și simplu un regex, astfel puteți folosi logica normală a regex pentru a-l face mai complex

Poate exista o modalitate de a face acest lucru cu un singur apel al funcției register_rest_route
, nu știu cum să fac asta și ar fi ideal. Cu toate acestea, duplicarea apelului funcției register_rest_route
în metoda conectată va face ceea ce doriți.
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'
],
] );
În metoda get_animals, veți dori să aveți condiții care să gestioneze fiecare caz. Una pentru cazul în care argumentul id
este setat, iar verificarea implicită pentru variabilele $_GET
.
