Необов'язковий параметр користувальницької кінцевої точки Wordpress Rest API


15

Чи можливо використовувати 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 / тварини / 15 , але чи є спосіб оголосити парам як необов'язковий, щоб також ловити маршрут типу / wp-json / api / тварини / .

Я також спробував оголосити маршрут як нижче, але без успіху:

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

Ви можете оголосити інший маршрут без парами або використовувати параметри GET, але чи є спосіб це зробити вже в register_rest_route()?

Дякуємо за ваші пропозиції.

Відповіді:


18

Ви повинні розмістити названі параметри регулярного вираження маршруту у необов'язковій групі захоплення:

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

Другий параметр - це просто регулярний вираз, таким чином, ви можете використовувати звичайну логіку регулярного вираження, щоб зробити його складнішим


3

Можливо, є спосіб зробити це за допомогою одного 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змінних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.