Wordpress Rest API punto final personalizado parámetro opcional


15

¿Es posible usar register_rest_route()con parámetros opcionales en url?

Digamos que la ruta se registra de esta manera:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Ahora es posible realizar una llamada API en url como / wp-json / api / animals / 15 , pero hay una manera de declarar el parámetro como opcional para también capturar rutas como / wp-json / api / animals / .

También intenté declarar la ruta como a continuación, pero sin éxito:

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

Puede declarar otra ruta sin el parámetro o utilizar parámetros GET, pero ¿hay alguna manera de hacerlo ya en el register_rest_route()?

Gracias por sus sugerencias

Respuestas:


18

Debe colocar los parámetros con nombre de la expresión regular de ruta en un grupo de captura opcional:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

El segundo parámetro es simplemente una expresión regular, por lo que puede usar la lógica de expresión regular normal para hacerlo más complejo


3

Puede haber una manera de hacerlo con una register_rest_routellamada de función, no sé cómo hacerlo y sería ideal. Sin embargo, duplicar la register_rest_routellamada a la función en el método enganchado hará lo que desee.

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'
    ],
] );

Es el método get_animals que querrás tener condiciones que manejen cada caso. Uno para si idse establece el argumento, y el respaldo verifica las $_GETvariables.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.