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

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

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

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

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

Например, стандартный шорткод WordPress [gallery] выводит галерею изображений. Создав свой шорткод, вы можете реализовать уникальный функционал, полностью адаптированный под задачи сайта.

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

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

Рассмотрим простой пример шорткода, который выводит текущую дату:

function wptest_current_date_shortcode() {
    return date('d.m.Y');
}
add_shortcode('current_date', 'wptest_current_date_shortcode');

Теперь в любом месте контента можно написать [current_date], и WordPress выведет сегодняшнюю дату в формате дд.мм.гггг.

Обратите внимание, что функция должна возвращать, а не выводить (echo) результат, иначе шорткод не сработает корректно.

Шорткод с параметрами: передаём аргументы в функцию

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

Функция шорткода принимает два параметра: массив атрибутов и содержимое внутри шорткода (если он используется в виде [shortcode]содержимое[/shortcode]).

function wptest_greeting_shortcode($atts) {
    $atts = shortcode_atts(
        array('name' => 'гость'),
        $atts,
        'greeting'
    );
    return 'Привет, ' . esc_html($atts['name']) . '!';
}
add_shortcode('greeting', 'wptest_greeting_shortcode');

Использование: [greeting name="Андрей"] выведет «Привет, Андрей!». Если параметр name не передан, будет использовано значение по умолчанию «гость».

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

Шорткод с вложенным содержимым: пример и особенности

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

function wptest_box_shortcode($atts, $content = null) {
    return '<div style="padding:10px; border:1px solid #ccc; background:#f9f9f9;">' . do_shortcode($content) . '</div>';
}
add_shortcode('box', 'wptest_box_shortcode');

Пример использования: [box]Это важное сообщение[/box].

Обратите внимание, что мы вызываем do_shortcode() для обработки вложенных шорткодов внутри содержимого.

Пример сложного шорткода с подключением внешних данных

Предположим, нам нужно вывести список последних постов в шорткоде. Для этого используем WP_Query и вернём HTML с заголовками ссылок.

function wptest_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(array(
        'count' => 5
    ), $atts, 'latest_posts');

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

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

Теперь шорткод [latest_posts count="3"] выведет 3 последние опубликованные записи с ссылками.

Безопасность и производительность шорткодов

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

Для кеширования можно использовать Transients API, чтобы сохранять результат шорткода на определённое время.

function wptest_cached_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(array('count' => 5), $atts, 'cached_latest_posts');
    $cache_key = 'wptest_latest_posts_' . intval($atts['count']);
    $output = get_transient($cache_key);
    if ($output === false) {
        $output = wptest_latest_posts_shortcode($atts);
        set_transient($cache_key, $output, 12 * HOUR_IN_SECONDS);
    }
    return $output;
}
add_shortcode('cached_latest_posts', 'wptest_cached_latest_posts_shortcode');

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

Подключение шорткодов в виджетах и шаблонах

Шорткоды работают не только в контенте записей. Их можно использовать в текстовых виджетах и PHP-коде шаблонов.

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

В шаблонах PHP используйте функцию do_shortcode():

echo do_shortcode('[greeting name="Андрей"]');

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

Резюме: почему стоит создавать собственные шорткоды

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

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

Как добавить автоматическое удаление спама в комментариях WordPress
08.01.2026
Как автоматизировать удаление старого контента в WordPress
07.02.2026
Как создать меню выпадающего списка в WordPress с помощью PHP и JavaScript
18.12.2025
Как сделать автоматический импорт постов в WordPress с помощью плагинов и кода
21.01.2026
Как сделать безопасный вход в WordPress с помощью двухфакторной авторизации
26.11.2025