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

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

Что такое шорткоды в WordPress и зачем их создавать

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

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

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

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

Для создания собственного шорткода нужно использовать функцию add_shortcode(). Она принимает два аргумента: имя шорткода и callback-функцию, которая возвращает HTML для вывода.

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

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

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

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

Обработка атрибутов и безопасность шорткодов

Очень важно правильно обрабатывать входящие данные в шорткодах, чтобы избежать XSS-уязвимостей. Для этого используйте функции esc_html(), esc_attr() или wp_kses_post() в зависимости от контекста вывода.

В нашем примере имя пользователя мы обрабатываем функцией esc_html(), чтобы убрать потенциально опасный HTML.

Также стоит ограничить доступ к определённым шорткодам, если они должны работать только для авторизованных пользователей. Например, можно проверить статус пользователя через is_user_logged_in().

Пример продвинутого шорткода: вывод последних записей с кастомными параметрами

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

function wpsource_recent_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'count' => 5,
        'category' => ''
    ), $atts, 'recent_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>';
    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('recent_posts', 'wpsource_recent_posts_shortcode');

Пример использования в записи: [recent_posts count="3" category="wordpress"] — выведет 3 последних записи из категории WordPress.

Использование плагинов для расширенного управления шорткодами

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

  • Shortcodes Ultimate — мощный плагин с множеством готовых шорткодов и удобным визуальным редактором.
  • WP Shortcode by MyThemeShop — простой набор полезных шорткодов для оформления контента.
  • Custom Content Shortcode — позволяет создавать свои шорткоды без программирования с помощью визуального интерфейса.

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

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

Для отладки шорткодов рекомендуется выводить ошибки и предупреждения в лог (например, с помощью error_log()) и тестировать работу с разными параметрами.

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

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

Пример кеширования результата в шорткоде через Transient API

function wpsource_cached_recent_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'count' => 5
    ), $atts, 'cached_recent_posts');

    $cache_key = 'wpsource_recent_posts_' . intval($atts['count']);
    $output = get_transient($cache_key);

    if ($output === false) {
        $query = new WP_Query(array('posts_per_page' => intval($atts['count']), 'post_status' => 'publish'));

        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>';

        set_transient($cache_key, $output, HOUR_IN_SECONDS);
    }

    return $output;
}
add_shortcode('cached_recent_posts', 'wpsource_cached_recent_posts_shortcode');

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

WooCommerce: почему не создаётся заказ и как это исправить
10.05.2026
Как создать автоматический sitemap в WordPress без плагинов
06.12.2025
WooCommerce: как автоматически удалять неоплаченные заказы по срокам
06.07.2026
Как создать собственный шорткод в WordPress с примером кода
01.12.2025
WooCommerce: решение проблем с оплатой через разные платёжные системы
21.05.2026