Вопрос или проблема
На моем сайте шорткоды отображаются в аннотациях, несмотря на то, что WordPress должен автоматически удалять их, и что я попробовал два различных решения:
function remove_shortcode_from_excerpt($content) {
$content = strip_shortcodes( $content );
return $content;
}
add_filter('the_excerpt', 'remove_shortcode_from_excerpt');
И
add_filter( 'the_excerpt', 'shortcode_unautop');
add_filter( 'the_excerpt', 'do_shortcode');
Которые я добавил в файл functions.php моей дочерней темы.
Каковы мои следующие варианты?
Итак, как указал iguanarama, первым шагом является то, чтобы убедиться, что используемая вами тема использует the_excerpt()
для отображения аннотации.
Вам нужно проверить в вашем файле archive.php
, как он отображается. В моей теме использовался файл 'template-parts/content-front-c.php'
. Затем перейдите в этот файл и посмотрите, какая функция отображает аннотацию. Сразу после того, как функция получает содержимое, добавьте $content=strip_shortcodes($content);
, и, в моем случае, это сработало!
Ответ или решение
Вопрос о том, почему шорткоды отображаются в экстрактах (excerpt) на вашем сайте WordPress, даже после использования функции strip_shortcodes
, требует внимательного анализа и подхода к решению. Давайте разберем эту проблему и предложим несколько решений.
Проблема
Ваши попытки использовать фильтры the_excerpt
для удаления шорткодов не увенчались успехом, что может быть связано с тем, как генерируется и выводится экстракт в вашей теме. Ваша цель — гарантировать, что шорткоды не будут отображаться, когда вы используете функцию the_excerpt()
.
Решение
-
Проверка темы:
Первым делом вам нужно убедиться, что в вашей теме действительно используетсяthe_excerpt()
для отображения экстрактов. Для этого проведите аудит файлов вашей темы, особенно в шаблонах, которые отвечают за вывод записей (например,archive.php
,index.php
или файлы в папкеtemplate-parts
). -
Изменение функции вывода экстракта:
Если вы нашли, что ваша тема использует пользовательскую функцию для отображения экстракта, например,get_the_excerpt()
илиthe_excerpt()
, вам необходимо вставить код, убирающий шорткоды непосредственно после получения контента. Например:$content = get_the_content(); $content = strip_shortcodes($content); echo wp_trim_words($content, 30); // Показывает первые 30 слов без шорткодов
Либо, если используете
the_excerpt()
, добавьте в соответствующем месте:add_filter('the_excerpt', 'remove_shortcode_from_excerpt', 10);
Это должно помочь убрать шорткоды из экстракта.
-
Настройка фильтров:
Если изменения не помогли, проверьте, правильно ли подключены ваши фильтры. Иногда приоритет выполнения фильтров может оказать влияние на результат. Попробуйте установить более высокий приоритет, добавив в вашу функцию:function remove_shortcode_from_excerpt($content) { return strip_shortcodes($content); } add_filter('the_excerpt', 'remove_shortcode_from_excerpt', 9); // Устанавливаем приоритет
-
Проверка использования другого фильтра:
Использованиеshortcode_unautop
иdo_shortcode
может вести к конфликтам, если они применяются неправильно. Убедитесь, что вы не смешиваете различные фильтры без необходимости. Функцияdo_shortcode
должна применяться к контенту после того, как были удалены все шорткоды, что в вашем случае может быть ненужным.
Заключение
Если после выполнения всех этих шагов шорткоды по-прежнему отображаются, возможно, дело в особенностях конкретной темы или в том, как создаются экстракты в плагинах, которые вы используете. В таком случае может потребоваться более глубокий анализ темы или плагинов, возможно, с помощью профессионального разработчика.
Не забывайте очищать кеш (если используете плагины кэширования), чтобы ваши изменения вступили в силу.
Такой подход к решению проблема обеспечит полностью функциональный вывод материалов на вашем сайте, а также повысит его привлекательность для ваших посетителей и поисковых систем.