Создание шорткодов для вывода данных в WordPress

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

Зачем нужны шорткоды в WordPress: преимущества и сферы применения

Шорткоды помогают сделать контент более гибким и удобным для пользователя. Они позволяют:

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

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

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

Начнем с самого простого примера — шорткода, который выводит фиксированный текст. Для этого добавим функцию в файл functions.php вашей темы или в плагин:

function wpcoder_simple_shortcode() {
    return 'Привет, это пример простого шорткода!';
}
add_shortcode('wpcoder_hello', 'wpcoder_simple_shortcode');

Теперь, вставив в редактор WordPress шорткод [wpcoder_hello], вы увидите текст «Привет, это пример простого шорткода!».

Объяснение кода

Функция wpcoder_simple_shortcode возвращает строку, которая и выводится вместо шорткода. Хук add_shortcode регистрирует шорткод с именем wpcoder_hello и связывает с функцией, которая обрабатывает вызов.

Шорткод с параметрами: как передавать аргументы

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

function wpcoder_greet_shortcode($atts) {
    $attributes = shortcode_atts(array(
        'name' => 'Гость'
    ), $atts);
    return 'Привет, ' . esc_html($attributes['name']) . '! Добро пожаловать на наш сайт.';
}
add_shortcode('wpcoder_greet', 'wpcoder_greet_shortcode');

Использование: [wpcoder_greet name="Иван"] выведет «Привет, Иван! Добро пожаловать на наш сайт.»

Подробности работы с параметрами

Функция shortcode_atts объединяет переданные параметры с установленными по умолчанию, что позволяет гибко управлять входящими значениями. Функция esc_html защищает от вывода вредоносного кода.

Вывод данных из базы WordPress через шорткод: пример с последними постами

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

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

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

    if (!$query->have_posts()) {
        return 'Нет доступных записей.';
    }

    $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('wpcoder_recent_posts', 'wpcoder_recent_posts_shortcode');

Пример использования: [wpcoder_recent_posts count="3"] выведет три последних поста.

Разбор запроса WP_Query

Мы создаём объект WP_Query, который вытягивает последние записи по параметрам. Важно не забывать вызывать wp_reset_postdata() после цикла, чтобы не нарушить глобальные данные WordPress.

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

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

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

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

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

При создании шорткодов важно соблюдать меры безопасности:

  • Используйте функции esc_html(), esc_attr(), wp_kses_post() для очистки данных перед выводом.
  • Не выполняйте опасные операции напрямую из шорткода без проверки прав пользователя.
  • Минимизируйте количество запросов к базе — кешируйте результаты, если это возможно.

Оптимизация помогает избежать замедления сайта и повышает стабильность.

Пример кеширования с использованием Transient API

function wpcoder_cached_recent_posts_shortcode($atts) {
    $atts = shortcode_atts(array('count' => 5), $atts);
    $cache_key = 'wpcoder_recent_posts_' . intval($atts['count']);
    $output = get_transient($cache_key);

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

        if (!$query->have_posts()) {
            return 'Нет доступных записей.';
        }

        $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, 12 * HOUR_IN_SECONDS);
    }

    return $output;
}
add_shortcode('wpcoder_cached_recent_posts', 'wpcoder_cached_recent_posts_shortcode');

Этот пример сокращает нагрузку на базу, кэшируя вывод на 12 часов.

Как добавить автоматический alt-текст к изображениям в WordPress
19.03.2026
WooCommerce: как автоматически удалять заказы по возрасту и статусу
04.05.2026
Как использовать хук pre_get_posts для фильтрации записей в WordPress
20.04.2026
WooCommerce: очистка корзины и автоматическое удаление старых заказов
30.04.2026
Автоматическое изменение статуса заказа в WooCommerce при отсутствии оплаты
15.05.2026