HTML в выдержке WordPress 6.2.2

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

Некоторое время назад (более 5 лет) меня попросили создать сайт, где требуется добавить немного HTML в отрывок WP. Насколько я помню, я добился этого, переопределив “get_the_excerpt”, что-то вроде принятого ответа здесь: Allow HTML in excerpt

Это, кажется, не работает в последней версии WP 6.2.2 (на момент написания), может ли кто-то указать мне правильное направление для разрешения включения нескольких HTML тегов в отрывок?

Если я изменю formatting.php > strip_all_tags, как показано ниже, я получу нужный мне результат, но, очевидно, изменение ядра не является решением, как бы я добился этого в functions.php моей дочерней темы?

function wp_strip_all_tags( $text, $remove_breaks = false ) {
    if ( is_null( $text ) ) {
        return '';
    }

    if ( ! is_scalar( $text ) ) {
        trigger_error(
            sprintf(
                __( 'Warning: %1$s expects parameter %2$s (%3$s) to be a %4$s, %5$s given.' ),
                __FUNCTION__,
                '#1',
                '$text',
                'string',
                gettype( $text )
            ),
            E_USER_WARNING
        );

        return '';
    }

    $text = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $text );
    $text = strip_tags( $text, '<h3>, <div>, <span>' ); // TO DO OVERRIDE

    if ( $remove_breaks ) {
        $text = preg_replace( '/[\r\n\t ]+/', ' ', $text );
    }

    return trim( $text );
}

Для начала вам нужно удалить функцию wp_trim_excerpt из фильтра get_the_excerpt:

remove_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10 );

Это приведет к отсутствию автоматической генерации отрывков (вручную введенные отрывки все равно будут отображаться).

Отсюда добавьте свою собственную функцию и фильтр для генерации отрывка:

function trim_excerpt_with_html( $text="", $post = null ) {
    ...
}
add_filter( 'get_the_excerpt', 'trim_excerpt_with_html', 10, 2 );

.

Ответ или решение

Конечно! Давайте рассмотрим, как внедрить HTML в отрывок (excerpt) на WordPress 6.2.2, сохраняя при этом целостность и работоспособность вашего сайта. Ваша задача — разрешить использование определенных HTML-тегов в отрывках, избегая при этом редактирования ядра WordPress, так как это приведет к проблемам при будущих обновлениях платформы.

Шаг 1: Удаление стандартного фильтра

Сначала вам нужно убрать стандартный фильтр wp_trim_excerpt, чтобы предотвратить автоматическое обрезание текста без HTML-тегов. Это можно сделать следующим образом:

remove_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10 );

Данный код отключает стандартное формирование отрывков. Однако это решение подходит только для тех случаев, когда отрывки вводятся вручную: такие отрывки продолжат отображаться.

Шаг 2: Создание собственного фильтра

После того, как стандартный фильтр удалён, необходимо написать свою собственную функцию для обработки отрывков. В вашей теме, в файле functions.php создайте новую функцию:

function trim_excerpt_with_html($text = "", $post = null) {
    if ('' == $text) {
        // Получаем полный текст
        $text = get_the_content('');

        // Удаляем короткие коды и выполняем предварительную обработку
        $text = strip_shortcodes($text);
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]&gt;', $text);

        // Разрешаем использование определенных тегов
        $allowed_tags = '<h3><div><span>'; // Укажите необходимые теги
        $text = strip_tags($text, $allowed_tags);

        // Ограничиваем длину текста отрывка (при необходимости)
        $excerpt_length = apply_filters('excerpt_length', 55);
        $text = wp_trim_words($text, $excerpt_length, '...');
    }

    return $text;
}
add_filter('get_the_excerpt', 'trim_excerpt_with_html', 10, 2);

Пояснение кода:

  • Обработка текста: Внутри функции сначала получаем полный контент поста и убираем короткие коды.
  • Фильтрация: Функция strip_tags позволяет оставить определенные HTML-теги, указанные в строке $allowed_tags.
  • Ограничение: Вы можете использовать wp_trim_words для ограничения количества слов в отрывке, если это необходимо.

Заключение

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

Используйте этот подход, чтобы сделать ваш сайт более привлекательным и интерактивным, сохраняя SEO-оптимизацию и пользовательский опыт на высшем уровне.

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

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