Как удалить теги заголовков и шорткоды из the_excerpt()

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

Я пытаюсь научиться удалять “теги заголовков” и “шорткоды” из 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. Давайте рассмотрим оба аспекта: удаление шорткодов и заголовков.

Удаление Шорткодов

  1. Использование встроенной функции strip_shortcodes.

    В первую очередь, можно настроить фильтр в вашем functions.php для автоматического удаления шорткодов из отрывков. Добавьте следующий код:

    add_filter( 'get_the_excerpt', 'strip_shortcodes', 20 );

    Эта строка активирует встроенную функцию WordPress, которая удаляет шорткоды из текста.

  2. Альтернативное решение через явный вывод.

    Если первый метод не работает, попробуйте запустить strip_shortcodes вручную:

    echo strip_shortcodes( get_the_excerpt() );
  3. Если шорткод не зарегистрирован.

    В случае, если некоторые шорткоды не зарегистрированы через функцию 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;
    }

Удаление Заголовочных Тегов

Чтобы избавиться от заголовков в отрывках, воспользуйтесь следующим подходом:

  1. Создание функции удаления заголовков.

    Поместите следующий код в 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);

Заключение

Эти методы помогут вам эффективно удалить заголовки и шорткоды из отрывков, улучшая читаемость и внешний вид вашей веб-страницы. Важно протестировать изменения на локальном сервере перед тем, как внедрять их в рабочей среде, чтобы гарантировать корректность функционирования с учетом специфики вашего сайта.

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

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