WP REST API удаляет шорткоды WordPress из содержимого JSON wp/v2/posts content->rendered.

Вопрос или проблема

Я пытаюсь избавиться от шорткодов, которые WordPress выдает мне, когда я использую WP REST API. Мне уже удалось удалить HTML-теги, отредактировав class-wp-rest-posts-controller.php с помощью strip_tags(). Но я не могу найти решения для шорткодов.

пример содержимого, которое я получаю от API с шорткодами

Я попробовал несколько решений, которые не сработали, например, написать этот код в 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. Это поможет вам обеспечить, чтобы ваши пользователи получали именно тот контент, который вы хотите представить, без ненужных шорткодов. Если возникнут дополнительные вопросы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...