Опциональные параметры в пользовательской конечной точке WordPress Rest API

26 янв. 2017 г., 15:52:26
Просмотры: 25.4K
Голосов: 24

Возможно ли использовать register_rest_route() с опциональными параметрами в URL?

Допустим, маршрут зарегистрирован таким образом:

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

Сейчас возможно выполнить API-запрос по URL вида /wp-json/api/animals/15, но есть ли способ объявить параметр как опциональный, чтобы также обрабатывать маршрут вида /wp-json/api/animals/.

Я также пробовал объявить маршрут как показано ниже, но безуспешно:

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

Вы можете объявить другой маршрут без параметра или использовать GET параметры, но есть ли способ сделать это непосредственно в register_rest_route()?

Спасибо за ваши предложения.

0
Все ответы на вопрос 2
0
37

Вам следует поместить именованные параметры регулярного выражения маршрута в необязательную захватывающую группу:

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

Второй параметр — это просто регулярное выражение, поэтому вы можете использовать стандартную логику регулярных выражений для его усложнения

20 мар. 2018 г. 23:26:30
0

Возможно, существует способ сделать это с помощью одного вызова функции register_rest_route, но я не знаю, как именно, и это было бы идеально. Однако дублирование вызова функции register_rest_route в хуке позволит достичь желаемого результата.

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

В методе get_animals следует предусмотреть условия для обработки каждого случая: одно для ситуации, когда параметр id установлен, и запасной вариант с проверкой переменных $_GET.

25 июн. 2017 г. 22:59:17