Вопрос или проблема
Я пытаюсь научиться удалять “теги заголовков” и “шорткоды” из the_excerpt()
… Искал ответ, но безуспешно, поэтому решил спросить у сообщества.
Спасибо за ваше время
С уважением,
Шон
Удаление шорткодов
Сначала попробуйте следующее в вашем functions.php
:
add_filter( 'get_the_excerpt', 'strip_shortcodes', 20 );
Если это не сработает, попробуйте это редактирование.
echo strip_shortcodes( get_the_excerpt() );
В случае, если шорткод не зарегистрирован с помощью функции WordPress add_shortcode
add_filter( 'the_excerpt', 'remove_shortcodes_in_excerpt', 20 );
function remove_shortcodes_in_excerpt( $content){
$content = strip_shortcodes($content);
$tagnames = array('box', 'alert'); // добавить имена тегов шорткодов
$content = do_shortcodes_in_html_tags( $content, true, $tagnames );
$pattern = get_shortcode_regex( $tagnames );
$content = preg_replace_callback( "/$pattern/", 'strip_shortcode_tag', $content );
return $content;
}
Удаление заголовков
Добавьте этот код в ваш functions.php
function wp_strip_header_tags( $text ) {
$raw_excerpt = $text;
if ( '' == $text ) {
//Извлечение содержимого поста.
$text = get_the_content('');
//удаление шорткодов из данного содержимого.
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
}
$regex = '#(]*>)\s?(.*)?\s?()#';
$text = preg_replace($regex,'', $text);
/***Изменить количество слов в отрывке.***/
$excerpt_word_count = 60; //По умолчанию в WP - 55
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
/*** Измените окончание отрывка.***/
$excerpt_end = '[...]'; //Это значение по умолчанию в WP.
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
$excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );
return apply_filters('wp_trim_excerpt', $excerpt, $raw_excerpt);
}
add_filter( 'get_the_excerpt', 'wp_strip_header_tags', 5);
Ответ или решение
Чтобы удалить заголовочные теги и шорткоды из the_excerpt()
, вы можете использовать подход, описанный ниже. Это решение требует изменения файла functions.php
вашей темы WordPress. Давайте рассмотрим оба аспекта: удаление шорткодов и заголовков.
Удаление Шорткодов
-
Использование встроенной функции
strip_shortcodes
.В первую очередь, можно настроить фильтр в вашем
functions.php
для автоматического удаления шорткодов из отрывков. Добавьте следующий код:add_filter( 'get_the_excerpt', 'strip_shortcodes', 20 );
Эта строка активирует встроенную функцию WordPress, которая удаляет шорткоды из текста.
-
Альтернативное решение через явный вывод.
Если первый метод не работает, попробуйте запустить
strip_shortcodes
вручную:echo strip_shortcodes( get_the_excerpt() );
-
Если шорткод не зарегистрирован.
В случае, если некоторые шорткоды не зарегистрированы через функцию
add_shortcode
, используйте следующий код:add_filter( 'the_excerpt', 'remove_shortcodes_in_excerpt', 20 ); function remove_shortcodes_in_excerpt( $content ){ $content = strip_shortcodes($content); $tagnames = array('box', 'alert'); // добавьте имена тегов шорткодов $content = do_shortcodes_in_html_tags( $content, true, $tagnames ); $pattern = get_shortcode_regex( $tagnames ); $content = preg_replace_callback( "/$pattern/", 'strip_shortcode_tag', $content ); return $content; }
Удаление Заголовочных Тегов
Чтобы избавиться от заголовков в отрывках, воспользуйтесь следующим подходом:
-
Создание функции удаления заголовков.
Поместите следующий код в
functions.php
, чтобы удалить заголовочные теги из текста:function wp_strip_header_tags( $text ) { $raw_excerpt = $text; if ( '' == $text ) { // Получаем содержимое поста. $text = get_the_content(''); // Удаляем шорткоды из содержания. $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); } // Регулярное выражение для удаления заголовков H1-H6. $regex = '#<h[1-6][^>]*>(.*?)<\/h[1-6]>#'; $text = preg_replace($regex, '', $text); // Смена количества слов и окончания отрывка. $excerpt_word_count = 60; // По умолчанию в WP — 55 $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); $excerpt_end = '[...]'; // Это является стандартным окончанием WP. $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); $excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more ); return apply_filters('wp_trim_excerpt', $excerpt, $raw_excerpt); } add_filter( 'get_the_excerpt', 'wp_strip_header_tags', 5);
Заключение
Эти методы помогут вам эффективно удалить заголовки и шорткоды из отрывков, улучшая читаемость и внешний вид вашей веб-страницы. Важно протестировать изменения на локальном сервере перед тем, как внедрять их в рабочей среде, чтобы гарантировать корректность функционирования с учетом специфики вашего сайта.