Як вивести результат шорткоду в анонсі WordPress

Привіт:) За замовчуванням WordPress не виконує шорткоди в анонсі запису (the_excerpt). Це означає, що якщо ви вставите шорткод у текст статті, він з’явиться у повному вмісті (the_content()), але в анонсі залишиться як звичайний текст у квадратних дужках.

Іноді це незручно. Наприклад, вам може знадобитися:

  • вивести кнопку або банер у списку записів;
  • показати автоматично згенероване повідомлення або лічильник;
  • додати текст із плагіну, який працює через шорткод.

У цьому гайді розберу як додати підтримку шорткодів в анонсі та замінити стандартне обрізання тексту на власне.

Крок 1. Заміна стандартної функції обрізання анонсу

Відкрийте файл functions.php вашої теми (бажано дочірньої) і вставте цей код:

add_filter( 'the_excerpt', 'do_shortcode' ); // Дозволити шорткоди в анонсі
remove_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10 ); // Вимкнути стандартну функцію обрізання
add_filter( 'get_the_excerpt', 'mp_wp_trim_excerpt', 99 ); // Включити свою
function mp_wp_trim_excerpt( $text ) {
    if ( $text == '' ) {
        // Отримати повний контент
        $text = get_the_content( '' );
        // Додати підтримку шорткодів
        $text = do_shortcode( $text );
        // Видалити всі HTML теги
        $text = wp_strip_all_tags( $text );
        // Залишити перші 45 слів
        $text = explode( ' ', $text, 45 );
        array_pop( $text );
        $text = implode( ' ', $text );
    }

    return $text;
}

Пояснення:

  • do_shortcode() змушує WordPress виконувати шорткоди у тексті.
  • wp_strip_all_tags() прибирає HTML для чистоти анонсу.
  • 45 — кількість слів в анонсі (змініть під ваші потреби).
до змісту ↑

Крок 2. Створення тестового шорткоду

Щоб перевірити роботу, додайте у functions.php простий шорткод:

add_shortcode( 'simple_text_shortcode', 'simple_text_shortcode' );
function simple_text_shortcode( $atts ) {
	return 'Вітаю! Це звичайний текст, доданий через шорткод.<br><br>';
}

Крок 3. Використання шорткоду у записі

У редакторі запису вставте:

[simple_text_shortcode]

Опублікуйте запис. Якщо ви виводите анонси записів за допомогою the_excerpt(), то в них тепер з’явиться текст, що генерується шорткодом.

Як дозволити HTML в анонсі

Якщо ваш шорткод виводить кнопки, таблиці чи інший HTML, WordPress може їх вирізати. Щоб дозволити певні теги, використовуйте:

add_filter( 'wp_kses_allowed_html', 'mp_allow_html_in_excerpt', 10, 1 );
function mp_allow_html_in_excerpt( $allowed_tags ) {
    $allowed_tags['a'] = [
        'href' => [],
        'title' => [],
        'class' => []
    ];
    $allowed_tags['br'] = [];
    $allowed_tags['strong'] = [];
    $allowed_tags['em'] = [];
    
    return $allowed_tags;
}

Додаткові поради

  • Якщо використовуєте власне поле для анонсу або кастомний шаблон, переконайтесь, що там теж використовується the_excerpt() або підключений фільтр get_the_excerpt.
  • Для складніших шорткодів, які виводять HTML (наприклад, кнопки або блоки), можливо, знадобиться дозволити деякі HTML-теги, які зазвичай фільтруються в анонсі. Це можна зробити через фільтр wp_kses_allowed_html.

WordPress за замовчуванням не виконує шорткоди в анонсі, але кілька рядків коду — і ця функціональність у вас під рукою. Тепер ви можете виводити будь-який контент із шорткодів у списках записів, на головній сторінці, у рубриках тощо.

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *