Как сделать динамические шорткоды WordPress: примеры и практические решения

|

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

Что такое динамические шорткоды и зачем они нужны

Стандартный шорткод — это такая конструкция в виде [example], которая при выводе на странице заменяется на определённый HTML или другой контент. Однако часто нужно, чтобы шорткод принимал параметры, например, [example id="123" color="red"], и генерировал уникальный контент в зависимости от этих параметров.

Динамические шорткоды позволяют:

Рассмотрим, как реализовать такие шорткоды на примерах.

Как создать динамический шорткод: базовая структура

Для начала нам нужно зарегистрировать шорткод в WordPress с помощью функции add_shortcode. В обработчике шорткода мы принимаем атрибуты и возвращаем строку с нужным контентом.

Пример базового динамического шорткода:

function wppremium_dynamic_shortcode($atts) {
    // Задаём параметры по умолчанию
    $atts = shortcode_atts(array(
        'text' => 'Привет, мир!',
        'color' => 'black'
    ), $atts, 'wppremium_dynamic');

    // Формируем HTML с учётом параметров
    return '<span style="color:' . esc_attr($atts['color']) . '">' . esc_html($atts['text']) . '</span>';
}
add_shortcode('wppremium_dynamic', 'wppremium_dynamic_shortcode');

Теперь в редакторе можно вставить [wppremium_dynamic text="Текст" color="red"] и получить цветной текст.

Практический пример: шорткод для вывода последних постов с фильтрацией

Представим, что нам нужно вывести список последних записей с возможностью задавать количество и категорию через параметры шорткода.

Реализуем шорткод [wppremium_latest_posts count=5 category="novosti"].

function wppremium_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'count' => 3,
        'category' => ''
    ), $atts, 'wppremium_latest_posts');

    $args = array(
        'posts_per_page' => intval($atts['count']),
        '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 class="wppremium-latest-posts">';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul>';
    wp_reset_postdata();

    return $output;
}
add_shortcode('wppremium_latest_posts', 'wppremium_latest_posts_shortcode');

Такой шорткод очень универсален и может быть использован в любом месте сайта без редактирования шаблонов.

Использование параметров и безопасность данных

Очень важно правильно обрабатывать входящие параметры. Используйте shortcode_atts для задания значений по умолчанию и фильтры esc_html, esc_attr и sanitize_text_field для очистки данных. Это защитит сайт от XSS-атак и других уязвимостей.

Например, в нашем шорткоде с последними постами мы очистили параметр category с помощью sanitize_text_field, а число постов преобразовали в целое через intval.

Расширение динамических шорткодов: добавляем кэширование результата

Если шорткод выполняет тяжелые запросы, стоит добавить кэширование результата с помощью Transients API. Это ускорит загрузку и снизит нагрузку на сервер.

function wppremium_cached_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'count' => 3,
        'category' => ''
    ), $atts, 'wppremium_cached_latest_posts');

    $cache_key = 'wppremium_latest_posts_' . md5(serialize($atts));
    $output = get_transient($cache_key);

    if ($output === false) {
        $args = array(
            'posts_per_page' => intval($atts['count']),
            '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 class="wppremium-latest-posts">';
        while ($query->have_posts()) {
            $query->the_post();
            $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        $output .= '</ul>';
        wp_reset_postdata();

        set_transient($cache_key, $output, 3600); // Кэш на час
    }

    return $output;
}
add_shortcode('wppremium_cached_latest_posts', 'wppremium_cached_latest_posts_shortcode');

Такой подход существенно улучшает производительность сайта при большом трафике.

Плагины для работы с динамическими шорткодами

Если хочется упростить создание сложных шорткодов без программирования, можно воспользоваться проверенными плагинами:

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

Выводы и рекомендации

Динамические шорткоды — это мощный инструмент расширения возможностей WordPress без изменения шаблонов. Они позволяют создавать гибкие и многофункциональные блоки контента, управляемые из редактора. Главное — правильно обрабатывать параметры и заботиться о безопасности.

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

Как добавить поддержку PHP 8 в WordPress без проблем
15.04.2026
Как создать главный вывод текстовой информации в WordPress без плагинов
22.01.2026
Как добавить собственные поля в формы регистрации WordPress и сохранить данные
26.03.2026
Как разрешить или запретить копирование текста в WordPress: практические методы
08.04.2026
Как добавить AJAX в формы WordPress без плагинов
15.12.2025
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше