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