Как создать собственный шорткод в WordPress

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

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

Шорткод — это специальный тег в квадратных скобках, например, [my_shortcode], который WordPress распознает и заменяет на определенный контент или функционал при выводе страницы. Это облегчает повторное использование кода и упрощает редактирование контента.

Пример использования: вы хотите вставить форму обратной связи, галерею изображений или интерактивный элемент без необходимости каждый раз писать сложный код.

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

Создание собственного шорткода: базовый пример

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

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

function wp_shablon_greeting_shortcode($atts) {
    $atts = shortcode_atts(array(
        'name' => 'Гость'
    ), $atts, 'greeting');

    return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на наш сайт.</p>';
}
add_shortcode('greeting', 'wp_shablon_greeting_shortcode');

Теперь в любом месте сайта вы можете вставить [greeting name="Алексей"], и появится текст: «Привет, Алексей! Добро пожаловать на наш сайт.»

Пояснения к коду

  • shortcode_atts позволяет задать значения по умолчанию и получить атрибуты из шорткода.
  • esc_html защищает от XSS-уязвимостей, экранируя вывод.
  • Функция возвращает строку, а не выводит напрямую, это важно для корректной работы.

Расширение шорткода: добавляем сложную логику и стили

Шорткод может выполнять запросы к базе, выводить списки постов, интегрироваться с API и т.д. Рассмотрим пример шорткода, который выводит последние 3 записи из категории с кастомным оформлением.

function wp_shablon_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'cat' => '',
        'count' => 3
    ), $atts, 'latest_posts');

    $args = array(
        'posts_per_page' => intval($atts['count']),
        'category_name' => sanitize_text_field($atts['cat'])
    );

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return '<p>Нет записей для отображения.</p>';
    }

    $output = '<ul class="wp-shablon-latest-posts">';
    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>';

    // Добавим стили для списка
    $output .= '<style>
        .wp-shablon-latest-posts { list-style: disc inside; padding-left: 0; }
        .wp-shablon-latest-posts li { margin-bottom: 8px; }
    </style>';

    return $output;
}
add_shortcode('latest_posts', 'wp_shablon_latest_posts_shortcode');

Используйте шорткод [latest_posts cat="novosti" count="5"], чтобы вывести 5 последних постов из категории «новости».

Что важно учесть

При написании шорткодов с запросами нужно обязательно сбрасывать глобальные посты через wp_reset_postdata(), чтобы избежать конфликтов с основным циклом WordPress.

Также старайтесь санитизировать входные параметры, чтобы защитить сайт от инъекций.

Популярные плагины для работы с шорткодами в WordPress

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

  • Shortcodes Ultimate — большой набор различных шорткодов с визуальным редактором.
  • WP Shortcode — удобный набор для вставки кнопок, колонок, панелей и других элементов.
  • Custom Shortcodes — позволяет создавать свои шорткоды через интерфейс без кодирования.

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

Советы по оптимизации и безопасности шорткодов

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

  • Минимизируйте количество запросов в базе внутри шорткодов.
  • Всегда проверяйте и фильтруйте входящие параметры.
  • Не выводите напрямую пользовательский ввод без экранирования.
  • Кэшируйте результат, если контент не меняется часто.

Например, можно использовать транзиенты WordPress для кэширования:

function wp_shablon_cached_shortcode() {
    $cache_key = 'wp_shablon_cached_content';
    $content = get_transient($cache_key);

    if (false === $content) {
        // Дорогая операция, например, запрос к API или сложный запрос к базе
        $content = '<p>Динамический контент с кэшем</p>';

        // Кэшируем на 1 час
        set_transient($cache_key, $content, HOUR_IN_SECONDS);
    }

    return $content;
}
add_shortcode('cached_content', 'wp_shablon_cached_shortcode');
Как использовать WP-Cron для запланированных задач в WordPress
09.01.2026
Как создать динамическую форму обратной связи в WordPress с помощью AJAX
24.02.2026
Как автоматизировать обновление шаблонов WordPress без рисков
16.04.2026
Как использовать мета-записи в WordPress для сохранения дополнительных данных
08.12.2025
WooCommerce: настройка подразделений магазина с разными складскими запасами
20.04.2026