Шорткоды в WordPress — мощный инструмент, который позволяет внедрять сложный функционал в записи, страницы и виджеты без необходимости писать много кода непосредственно в контенте. Однако часто возникает необходимость создавать динамические шорткоды, которые меняют вывод в зависимости от параметров или условий. В этой статье мы подробно разберем, как создать динамический шорткод на WordPress, рассмотрим примеры использования и предложим готовый код для внедрения.
Что такое динамический шорткод и зачем он нужен в WordPress
Простой шорткод — это, как правило, статический код, который выводит один и тот же контент каждый раз. Например, [my_shortcode] выводит фиксированное сообщение или блок. Динамический шорткод — это более гибкий инструмент, который умеет принимать параметры, реагировать на контекст страницы, пользовательские данные или другие условия и менять вывод в зависимости от них.
Примеры ситуаций, когда нужен динамический шорткод:
- Вывод списка товаров с фильтрацией по категории или цене;
- Показ персонализированных приветствий в зависимости от роли или имени пользователя;
- Встраивание интерактивных элементов, например, форм с динамическими данными;
- Отображение контента, зависящего от даты, времени или других условий.
Динамические шорткоды позволяют значительно расширить возможности сайта без необходимости постоянно менять шаблоны или писать сложный PHP-код в файлах темы.
Основы создания динамического шорткода: регистрация и обработка параметров
Чтобы создать шорткод в WordPress, используется функция add_shortcode. Она принимает два параметра: имя шорткода и callback-функцию, которая возвращает HTML-код для вывода на странице.
Рассмотрим базовый пример динамического шорткода, который принимает параметр name и выводит персонализированное приветствие:
function wpdemo_dynamic_greeting_shortcode($atts) {
$atts = shortcode_atts(array(
'name' => 'Гость'
), $atts, 'wpdemo_greeting');
return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на WPdemo.</p>';
}
add_shortcode('wpdemo_greeting', 'wpdemo_dynamic_greeting_shortcode');Теперь, если вставить в пост [wpdemo_greeting name="Иван"], пользователь увидит: "Привет, Иван! Добро пожаловать на WPdemo." Если параметр не указан, выводится приветствие для «Гость».
Этот базовый пример иллюстрирует, как использовать параметры для управления выводом шорткода.
Обработка нескольких атрибутов и безопасный вывод
Важно всегда использовать функцию shortcode_atts для задания значений по умолчанию и esc_html или аналогичные функции для защиты от XSS-уязвимостей при выводе данных пользователя. Разберем пример с несколькими параметрами:
function wpdemo_custom_box_shortcode($atts) {
$atts = shortcode_atts(array(
'title' => 'Заголовок',
'color' => '#333333'
), $atts, 'wpdemo_box');
$title = esc_html($atts['title']);
$color = esc_attr($atts['color']);
return "<div style='border:1px solid {$color}; padding:10px; margin:10px 0;'><strong style='color:{$color};'>{$title}</strong></div>";
}
add_shortcode('wpdemo_box', 'wpdemo_custom_box_shortcode');Используя [wpdemo_box title="Важное сообщение" color="#ff0000"], вы получите красную рамку с заголовком. Если параметры не заданы, применятся значения по умолчанию.
Пример: шорткод для вывода последних записей с фильтром по категории
Одна из полезных задач — вывести последние записи блога с возможностью фильтрации по категории через параметр шорткода. Это позволяет создавать страницы с кастомным контентом, не прибегая к сложным шаблонам.
Создадим шорткод [wpdemo_latest_posts category="slug"], который покажет 5 последних записей из указанной категории.
function wpdemo_latest_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => ''
), $atts, 'wpdemo_latest_posts');
$args = array(
'posts_per_page' => 5,
'post_status' => 'publish'
);
if (!empty($atts['category'])) {
$args['category_name'] = sanitize_text_field($atts['category']);
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Записей не найдено.</p>';
}
$output = '<ul>';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode('wpdemo_latest_posts', 'wpdemo_latest_posts_shortcode');Такой шорткод можно разместить на любой странице, например, [wpdemo_latest_posts category="novosti"] — и пользователи увидят последние 5 записей из категории «новости».
Использование готовых плагинов для управления шорткодами и расширения функционала
Если нет желания писать код, можно использовать плагины, которые значительно упрощают работу с шорткодами и добавляют расширенный функционал.
Плагины для создания динамических шорткодов
- Shortcodes Ultimate — один из самых популярных плагинов, который содержит множество готовых шорткодов с настройками. Можно создавать собственные шорткоды через визуальный интерфейс.
- WP Shortcode by MyThemeShop — простой и удобный инструмент с набором часто используемых элементов.
- Custom Content Shortcode — плагин для создания своих шорткодов без программирования.
Эти плагины отлично подходят для пользователей без опыта программирования, но для более гибких задач и интеграции с бизнес-логикой всегда лучше писать собственные шорткоды.
Расширение функционала с помощью хуков и фильтров
Для сложных проектов динамические шорткоды можно интегрировать с пользовательскими типами записей, метаданными, REST API и другими инструментами WordPress. Например, можно сделать шорткод, который выводит данные из внешнего API или создает интерактивный элемент с JavaScript.
Вот пример шорткода, который подключает внешний скрипт и передает динамические данные:
function wpdemo_dynamic_widget_shortcode($atts) {
$atts = shortcode_atts(array('user_id' => 0), $atts, 'wpdemo_widget');
wp_enqueue_script('wpdemo_widget_script', get_template_directory_uri() . '/js/widget.js', array('jquery'), '1.0', true);
return '<div id="wpdemo-widget" data-user-id="' . intval($atts['user_id']) . '">Загрузка виджета...</div>';
}
add_shortcode('wpdemo_widget', 'wpdemo_dynamic_widget_shortcode');В этом случае widget.js может использовать атрибут data-user-id для загрузки и отображения кастомного контента.
Советы по отладке и улучшению производительности динамических шорткодов
При создании шорткодов важно следить за производительностью и безопасностью:
- Кэширование результатов. Если шорткод выводит тяжелые запросы, стоит использовать транзиенты или другие механизмы кэширования.
- Экранирование данных. Всегда используйте функции
esc_html,esc_attr,wp_kses_postдля защиты от XSS. - Минимизация запросов к базе. Не делайте избыточных запросов внутри шорткода, если данные можно получить заранее.
- Тестирование на разных устройствах и темах. Шорткод должен корректно работать в разных условиях.
Для отладки используйте плагины типа Query Monitor и встроенный в WordPress режим отладки.
Заключение: создание динамических шорткодов на WPdemo
Динамические шорткоды — отличное решение для расширения функционала сайта WordPress без изменения кода темы. Они позволяют легко добавлять интерактивные и адаптивные блоки контента. В статье приведены практические примеры с кодом, которые можно сразу использовать и модифицировать под свои задачи.
Начинайте с простых шорткодов, добавляйте параметры, обрабатывайте данные и постепенно усложняйте логику. При необходимости используйте проверенные плагины, но не забывайте о безопасности и производительности. В итоге динамические шорткоды сделают ваш сайт более гибким и удобным для пользователей.