Вопрос или проблема
Я создал одно API с POST-запросом.
register_rest_route('myapi/v1', '/post_flyer', array(
'methods' => 'POST',
'callback' => 'api_post_flyer',
));
Мне нужно отправить данные формы с помощью <iframe></iframe>
или <script></script>
тега в содержимом поста.
Когда я пытаюсь проверить это API, используя Postman, каждый раз он показывает ошибку вроде “Маршрут не найден”,
"code": "rest_no_route",
"message": "Не найден маршрут, соответствующий URL и методу запроса",
"data": {
"status": 404
}
Хотя вся функциональность присутствует,
Я хочу знать, как включить API для приема iframe и HTML-тегов в содержимом поста?
Пожалуйста, уберите “https://wordpress.stackexchange.com/” из маршрута и попробуйте использовать действие добавления, как
add_action( 'rest_api_init', function () {
register_rest_route('myapi/v1', 'post_flyer', array(
'methods' => 'POST',
'callback' => 'api_post_flyer',
));
});
Ответ или решение
Решение проблемы с REST API в WordPress, не принимающим данные из HTML-тегов, включая iframe
Ваша проблема заключается в том, что созданный вами REST API не принимает данные, отправленные с помощью встроенных тегов <iframe>
и <script>
, и показывает ошибку "No route found". Давайте разберем, как правильно настроить REST API в WordPress и как разрешить использование HTML-тегов в передаваемых данных.
1. Правильная регистрация вашего REST API
Существует несколько важных нюансов, которые необходимо учитывать при регистрации REST API в WordPress. Ваша регистрация маршрута должна учитывать корректный путь и правильные параметры. Убедитесь, что ваш код выглядит приблизительно так:
add_action('rest_api_init', function () {
register_rest_route('myapi/v1', '/post_flyer', array(
'methods' => 'POST',
'callback' => 'api_post_flyer',
'permission_callback' => '__return_true', // учитывайте безопасность здесь
));
});
Обратите внимание на правильное использование символов /
для указания пути, а также на добавление permission_callback
, который устанавливает, кто может использовать этот маршрут.
2. Ошибка "No route found"
Если вы продолжаете получать ошибку “rest_no_route”, проверьте следующее:
- Убедитесь, что ваш сервер принимает POST-запросы.
- Проверьте, активирована ли ваша функция, которая добавляет маршрут, и правильно ли она инициализируется (например, в файле
functions.php
вашей темы или плагина). - Используйте правильный URL-адрес для вашего запроса. Например, если ваш сайт находит на
https://example.com
, ваш endpoint должен выглядеть так:https://example.com/wp-json/myapi/v1/post_flyer
.
3. Отправка данных с использованием HTML и iframe
Так как вы хотите отправлять данные, включая HTML-код и iframe, важно безопасно обрабатывать эти данные. WordPress по умолчанию может ограничивать такие элементы, чтобы предотвратить XSS-атаки. Однако, если вы уверены в источнике этих данных, выполните следующие шаги:
- Параметры ваши данных должны быть корректно экранированы перед использованием. Используйте функции
wp_kses_post()
илиwp_strip_all_tags()
в вашем коллбэке, если нужно сохранить HTML. Например:
function api_post_flyer(WP_REST_Request $request) {
$content = $request->get_param('content');
$sanitized_content = wp_kses_post($content); // Очищаем контент от нежелательных тегов
if (empty($sanitized_content)) {
return new WP_Error('empty_content', 'Content cannot be empty', array('status' => 400));
}
// Сохраните ваш контент или выполните другие действия
return new WP_REST_Response('Success', 200);
}
4. Отладка и тестирование
Вместе с использованием Postman, попробуйте осуществить тестирование вашего API с помощью cURL или других инструментов отладки (например, встроенных в браузер Developer Tools). Убедитесь, что вы:
- Используете правильный метод (POST).
- Передаете нужные заголовки, такие как
Content-Type: application/json
. - Указываете правильные параметры в вашем запросе.
Пример запроса в Postman:
URL: https://example.com/wp-json/myapi/v1/post_flyer
Headers:
Content-Type: application/json
Body (выберите "raw" формат, затем "JSON"):
{
"content": "<iframe src='example.com'></iframe>"
}
Следуя этим рекомендациям, вы сможете успешно интегрировать свой REST API с HTML-контентом. Убедитесь, что безопасность вашего сайта остается на высоком уровне, и обрабатывайте пользовательский ввод с особой тщательностью.