Шорткоды WordPress создание: полное руководство от простого к сложному

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

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

Регистрация простого шорткода с помощью add_shortcode

Самый базовый способ создать шорткод — вызвать функцию add_shortcode в файле functions.php вашей темы или в отдельном плагине.

Шаг 1: объявление функции‑обработчика

function my_simple_shortcode() {
    return '<div class="my-box">Привет, мир!</div>';
}

Шаг 2: привязка к тегу

add_shortcode( 'my_box', 'my_simple_shortcode' );

После этого в любом месте контента можно написать [my_box], и WordPress выведет указанную разметку.

Работа с атрибутами шорткода

Часто требуется передать параметры, например цвет или заголовок. WordPress передаёт массив атрибутов в обработчик.

Пример с атрибутами

function my_alert_shortcode( $atts ) {
    $args = shortcode_atts(
        array(
            'type'  => 'info',   // info, warning, error
            'text'  => 'Сообщение по умолчанию',
        ),
        $atts,
        'my_alert'
    );

    return sprintf(
        '<div class="alert %s">%s</div>',
        esc_attr( $args['type'] ),
        esc_html( $args['text'] )
    );
}
add_shortcode( 'my_alert', 'my_alert_shortcode' );

В контенте используем: [my_alert type="warning" text="Внимание!"]. Атрибуты удобно задавать через shortcode_atts, а значения экранировать функциями esc_attr и esc_html для защиты от XSS.

Вложенные шорткоды и работа с их содержимым

Иногда шорткод должен обернуть произвольный контент, который пользователи вводят между открывающим и закрывающим тегом.

Определяем шорткод, принимающий контент

function my_wrapper_shortcode( $atts, $content = null ) {
    $args = shortcode_atts( array(
        'class' => 'wrapper',
    ), $atts );

    // Обрабатываем вложенный контент через do_shortcode, чтобы поддержать другие шорткоды
    $inner = do_shortcode( $content );

    return sprintf(
        '<div class="%s">%s</div>',
        esc_attr( $args['class'] ),
        $inner
    );
}
add_shortcode( 'my_wrapper', 'my_wrapper_shortcode' );

Пример использования: [my_wrapper class="highlight"]Текст с [my_alert type="error" text="ошибкой"] внутри[/my_wrapper]. Функция do_shortcode гарантирует, что вложенный шорткод my_alert будет обработан.

Динамическая генерация HTML и безопасность

Шорткоды часто используют данные из базы, API или пользовательского ввода. Важно соблюдать два правила:

  • Экранирование вывода (esc_html, esc_attr, wp_kses_post).
  • Ограничение доступа к потенциально опасным функциям.

Пример: вывод последних записей

function recent_posts_shortcode( $atts ) {
    $args = shortcode_atts( array(
        'count' => 3,
    ), $atts );

    $query = new WP_Query( array(
        'posts_per_page' => intval( $args['count'] ),
        'post_status'    => 'publish',
    ) );

    if ( ! $query->have_posts() ) {
        return '

Шорткод [recent_posts count="5"] выведет список из пяти последних публикаций. Обратите внимание на esc_url и esc_html — без этого сайт уязвим к XSS‑атакам.

Связанные темы

Если ваш шорткод генерирует стили, подумайте о скорости. Быстрая замена Google Fonts на Bunny Fonts может снизить время загрузки до 3 секунд. А для контроля доступности сайта используйте Uptime мониторинг — так вы быстро узнаете, если шорткод «сломает» страницу.

Отладка и тестирование шорткодов

Во время разработки полезно выводить в лог значения атрибутов. Функция error_log записывает данные в debug.log, если включён WP_DEBUG_LOG. Пример:

function debug_shortcode( $atts ) {
    error_log( 'Debug shortcode attrs: ' . print_r( $atts, true ) );
    return 'Отладка завершена.';
}
add_shortcode( 'debug_me', 'debug_shortcode' );

После добавления [debug_me foo="bar"] проверьте wp-content/debug.log — вы увидите массив атрибутов.

Продвинутые техники: кэширование и AJAX

Если шорткод генерирует тяжёлый запрос (например, к внешнему API), кэшируйте результат через transient API:

function api_data_shortcode() {
    $cached = get_transient( 'api_data' );
    if ( false === $cached ) {
        $response = wp_remote_get( 'https://api.example.com/data' );
        if ( is_wp_error( $response ) ) {
            return '

Для интерактивных шорткодов можно подключить AJAX: регистрируем обработчик через wp_ajax_ и выводим контейнер <div id="my-app"></div>, который заполняет JavaScript.

Связанные материалы

Не забывайте про безопасность: сравните лучшие плагины защиты WordPress 2026 и настройте firewall UFW/iptables для защиты от запросов, которые могут пытаться вызвать ваш шорткод.

Заключение

Шорткоды — мощный инструмент, который позволяет внедрять динамический PHP‑код в контент без лишних усилий. Мы рассмотрели базовый пример, работу с атрибутами, вложенные шорткоды, безопасность и продвинутые техники кэширования. Применяйте полученные знания, экспериментируйте и улучшайте пользовательский опыт вашего сайта.

❓ Часто задаваемые вопросы

Как передать несколько атрибутов в шорткод?

Используйте массив $atts в функции‑обработчике и функцию shortcode_atts для задания значений по умолчанию. Атрибуты указываются в квадратных скобках через пробел: [my_shortcode attr1=»value» attr2=»value»].

Можно ли использовать шорткод внутри другого шорткода?

Да. В обработчике вложенного шорткода вызывайте do_shortcode($content), чтобы WordPress обработал любые вложенные теги перед выводом.

Как обезопасить вывод пользовательского контента в шорткоде?

Всегда экранируйте вывод: esc_html для текста, esc_attr для атрибутов, esc_url для ссылок и wp_kses_post для HTML‑разметки. Это защитит от XSS‑уязвимостей.

Как кэшировать результаты тяжёлого шорткода?

Используйте Transient API: get_transient() проверяет наличие кэша, а set_transient() сохраняет результат на нужный период (например, час). Это уменьшит количество запросов к базе или внешним API.