Вопрос или проблема
Я пытаюсь избавиться от шорткодов, которые WordPress выдает мне, когда я использую WP REST API. Мне уже удалось удалить HTML-теги, отредактировав class-wp-rest-posts-controller.php
с помощью strip_tags()
. Но я не могу найти решения для шорткодов.
Я попробовал несколько решений, которые не сработали, например, написать этот код в functions.php
// Удаляет шорткоды Divi
$content = preg_replace('/\[\/?et_pb.*?\]/', '', $content);
или вот это
$content = strip_tags( do_shortcode( $post->post_content ) );
Может быть, я делаю что-то неправильно, я в этом немного новенький. Если вы сможете мне помочь, это было бы замечательно.
Это не нужно, WordPress уже предоставляет полностью отрендеренное HTML-содержимое в ответах REST с уже обработанными шорткодами, превращенными в HTML. В объекте, на который API отвечает, есть поле content
, которое имеет подполе rendered
, содержащее то, что вам нужно. Используйте его вместо необработанной версии.
Ответ или решение
Когда вы работаете с WordPress REST API и хотите убрать шорткоды из контента, возвращаемого через wp/v2/posts
, важно понимать некоторые ключевые аспекты функционирования самой системы. Давайте рассмотрим, как можно добиться желаемого результата.
Шаг 1: Зачем удалять шорткоды?
На первый взгляд шорткоды могут показаться затруднением, если ваша цель — вывести захватывающий и чистый HTML-контент. Шорткоды часто используются для добавления определенной функциональности или контента в записи и страницы, и иногда они могут негативно влиять на внешний вид вашего сайта, если их оставить в возврате API.
Шаг 2: Использование функции do_shortcode
WordPress предоставляет встроенную функцию do_shortcode()
, которая обрабатывает шорткоды и заменяет их соответствующим контентом. Однако, эта функция работает на "сыром" содержимом записи, и вам нужно использовать её там, где вы получаете доступ к содержимому.
Пример кода для вашего файла functions.php
:
add_filter('rest_prepare_post', function ($response, $post, $request) {
// Получаем контент записи, обрабатываем шорткоды и удаляем теги HTML
$content = do_shortcode($post->post_content); // Обработка шорткодов
$content = strip_tags($content); // Убираем HTML-теги
$response->data['content']['rendered'] = $content; // Заменяем вывод в API
return $response;
}, 10, 3);
Шаг 3: Убедитесь, что вы используете правильный фильтр
В примере выше мы используем хук rest_prepare_post
. Это позволяет нам модифицировать ответ REST API перед его отправкой. Мы обрабатываем контент записи, убираем HTML-теги и устанавливаем новое значение для поля rendered
.
Шаг 4: Тестирование
После внесения изменений в файл functions.php
, важно протестировать, как теперь возвращается ответ на запрос API. Ссылки должны выглядеть корректно, а шорткоды должны быть удалены из результата.
Шаг 5: Учитесь на ошибках
Если вы столкнулись с проблемами при использовании описанного метода, убедитесь, что:
- У вас есть актуальная версия WordPress.
- Ваши шорткоды находятся в записи, а не в других типахMeta или пользовательских полях.
- Вы проверяете ответы API корректно.
Заключение
Для эффективного удаления шорткодов из контента, возвращаемого WordPress REST API, используйте встроенные функции WordPress, такие как do_shortcode()
и strip_tags()
, с фильтрами REST API. Это поможет вам обеспечить, чтобы ваши пользователи получали именно тот контент, который вы хотите представить, без ненужных шорткодов. Если возникнут дополнительные вопросы, не стесняйтесь задавать их!