Я застрял, пытаясь зарегистрировать маршрут REST для пользовательской функции плагина, чтобы сделать эту функцию вызываемой с помощью javascript.
В примерах показаны функции конечных точек, встроенные в сценарий регистрации в functions.php (например, по адресу https://www.sitepoint.com/creating-custom-endpoints-for-the-wordpress-rest-api/)
Однако моя функция конечной точки уже находится в файле PHP в пользовательском дереве плагинов.
Итак, я пытаюсь:
Зарегистрируйте маршрут для моей конечной точки, например:
www.example.com/test/v1/route_function_name
Укажите его на имя моей пользовательской функции, например
name_of_function
Скажите, где найти эту функцию, например
www.example.com/wp-content/plugins/custom-plugin-name/path-tree-stuff/public/plugin-functions-controller.php
Я застреваю на цифре 3. Проблемы:
а) Где я могу поместить ссылку на имя этой функции? Я не хочу вырывать свой код функции из этого файла и вставлять его в код регистрации маршрута.
б) Где я могу указать путь к функциональному файлу? В примерах, которые я следил, просто есть ссылки на массив, а не на фактические пути, поэтому не указывайте, как зарегистрировать маршрут к внешней конечной точке, которая не инкапсулирована в регистрационный код.
в) Я что-то упускаю? Похоже, что экранирование фактического пути к файлу php функций из JS просто приведет к его отображению в файле функций WP?
Справочник разработчика по адресу https://developer.wordpress.org/rest-api/exnding-the-rest-api/routes-and-endpoints/ похоже, что его примеры пытаются перехватить функции wordpress через настраиваемый маршрут, а не через настраиваемые функции.
Есть ли где-нибудь примеры, которые лучше подходят для моей ситуации? (Если у меня есть настраиваемая функция в настраиваемом файле в настраиваемом плагине, и мне просто нужно зарегистрировать маршрут REST и указать его на существующую функцию в существующем файле).
Пока у меня есть следующее, что явно неполно:
add_action(
'rest_api_init',
function () {
register_rest_route(
'test/v1',
'/route_function_name',
[
'methods' => 'POST',
'callback' => function (WP_REST_Request $request) {
// Need to somehow insert here a path to my function
name_of_function;
// Reponse is sent back by the function, so need to trap it [
'return-param-1' => $return-param-1,
'return-param-2' => $return-param-2,
'return-param-3' => $return-param-3,
];
},
]
);
}
);
Обоснование попытки сделать это:
- У меня уже запущен JS-скрипт
- Мне нужно, чтобы вызвать функцию PHP, которую я уже написал
- Это просто: просто укажите путь к функции в JS.
- Однако вместо этого я пытаюсь сделать это правильным способом WP (в основном из соображений безопасности, но также для успокоения духов DevProperly!)
Я предположил:
i) Место для регистрации маршрута REST находится в functions.php в активной дочерней теме;
ii) Место для моей пользовательской функции находится в файле php внутри моего существующего настраиваемого плагина;
iii) Код, который регистрирует оставшийся маршрут, должен указывать, по крайней мере, все из следующих трех вещей:
- URI нового маршрута REST
- Имя вызываемой функции php
- Файл и путь, по которому эта функция php может быть найдена в пути пользовательского плагина относительно / var / www.
Любое из этих предположений неверно?
require_once WP_PLUGIN_DIR . '/custom-plugin-name/path-tree-stuff/public/plugin-functions-controller.php';
в файле, чтобы он был доступен глобально. В идеале ваши REST-маршруты должны находиться внутри этого плагина, поскольку один также зависит от другого. Это не является абсолютным требованием, но я буквально работаю над 10-летним сайтом в данный момент со многими плагинами, которые имеют кросс-депозитарные функции, и отлаживать что-то - настоящая боль. - person Chris Haas   schedule 13.10.2020register_rest_route
в тот же файл, что и все существующие функции. В настоящее время я не вижу необходимости заключать их в классы (кроме инкапсуляции), поскольку сами функции (называемые здесь обратными вызовами) - это просто старые процедуры процедурных процессов skool; они не настроены как функции CRUD или операторы методов класса в модели ООП, и их именование достаточно защищено от конфликтов. Затем я буду использовать вышеуказанныйrequire_once
в основном файле плагина, как вы предлагаете. - person ed2   schedule 15.10.2020