Где зарегистрировать REST-маршрут к конечной точке плагина wordpress

Куда должна идти функция регистрации? (register_rest_route())

  • Он должен быть в theme / child functions.php?
  • Или это может быть в php-файле базы плагина? (например, \ wp-content \ plugins \ example \ example.php)

Есть ли документация, разъясняющая это?

Это не упоминается в официальной документации по адресу: https://developer.wordpress.org/rest-api/exnding-the-rest-api/routes-and-endpoints/

Точно так же, где должна храниться функция конечной точки? Функция регистрации только называет его, не указывая путь к нему.

Например, можете ли вы сделать это так:

  • Вызов функции регистрации (register_rest_route) происходит в основном файле плагина (например, \ wp-content \ plugins \ example \ example.php)
  • Функция конечной точки находится в каком-то другом файле плагина (например, \ wp-content \ plugins \ example \ sub-path-stuff \ example-controller.php)

Если да, то как?

Следующая ссылка пытается это сделать, но не указывает эти атрибуты (например, \ wp-content \ plugins \ example \ example.php)


person ed2    schedule 13.10.2020    source источник
comment
Все, что говорит Джонни Ти, правильно, я просто хотел кое-что прояснить. В WordPress каждый плагин и тема получают один и только один файл загрузки. Для плагина это тот, который содержит комментарии заголовка PHP, а для темы - functions.php. Вы можете поместить любые функции прямо в эти файлы, WordPress будет include их, а PHP поместит функции в глобальное пространство имен. В идеале, однако, эти файлы будут дополнять require_once другие файлы, чтобы вы могли разделить свой код, PHP будет следовать той же логике, и вы сохраните некоторое здравомыслие.   -  person Chris Haas    schedule 13.10.2020
comment
Отлично, спасибо. Итак, в этом случае я планирую создать функцию регистрации для каждой существующей функции обратного вызова и поместить каждую из них в те же отдельные файлы php, что и существующая функция обратного вызова. Затем основной файл плагина может содержать require_once для каждого другого файла php и последнюю строку (которая в приведенном ниже примере содержит rest_api_init). Звучит неплохо?   -  person ed2    schedule 15.10.2020
comment
Этот план должен абсолютно сработать. Я лично не стал бы предписывать какой-либо конкретный шаблон для организации кода, я бы оставил это на ваше усмотрение в зависимости от того, что имеет смысл. Что касается меня, я обычно регистрирую свои обратные вызовы как анонимные функции, которые вызывают автозагрузку PSR-4, закодированную из моей папки src, просто потому, что материал для регистрации API в основном шаблонный, но это просто мой собственный стиль.   -  person Chris Haas    schedule 15.10.2020


Ответы (1)


Таким образом, register_rest_route входит в хук действия rest_api_init, а обратные вызовы для маршрутов могут быть определены в том же файле или во внешнем (тогда вы можете потребовать его внутри основного файла, чтобы вы могли добавить их в route / s). Вот пример:

Допустим, у вас есть плагин api-test, он помещен в: \ wp-content \ plugins \ api-test, и мы добавим api-test.php в качестве основного файла плагина (для этого примера он будет работать, а не oop). Внутри api-test.php может быть что-то вроде:

/**
 * @wordpress-plugin
 * Plugin Name: WP Rest api testing..
 */

/**
 * at_rest_testing_endpoint
 * @return WP_REST_Response
 */
function at_rest_testing_endpoint()
{
    return new WP_REST_Response('Howdy!!');
}

/**
 * at_rest_init
 */
function at_rest_init()
{
    // route url: domain.com/wp-json/$namespace/$route
    $namespace = 'api-test/v1';
    $route     = 'testing';

    register_rest_route($namespace, $route, array(
        'methods'   => WP_REST_Server::READABLE,
        'callback'  => 'at_rest_testing_endpoint'
    ));
}

add_action('rest_api_init', 'at_rest_init');

Это действительно простой пример, когда все находится в одном файле.

person Johnny Tee    schedule 13.10.2020
comment
Спасибо @JohnnyTee, я протестирую и сообщу здесь. Я планирую переместить две примерные функции at_rest_testing_endpoint и at_rest_init в отдельный файл PHP, а затем require_once этот файл сюда. - person ed2; 15.10.2020
comment
Спасибо, этот ответ сработал. Для потомков я затем модифицировал / расширил, разделив на функциональные файлы (каждый required в основном файле плагина), добавил 'permission_callback' => '__return_true',, чтобы избежать мягкой ошибки WP в v5.5 + (мои функции предназначены для всех посетителей сайта, так что auth в порядке в моем случае использования) и обернул все функции в структуры классов. - person ed2; 15.10.2020
comment
как должен выглядеть пример URL, чтобы в браузере отображалось "Howdy !!"? http://localhost/wordpress/?someKey=someValue не работают в моих тестах - person SL5net; 30.04.2021