Как создать свой шорткод для вывода данных в WordPress

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

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

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

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

Регистрация шорткода: базовый пример

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

Пример функции и регистрации:

function wpdata_shortcode_show_date() {
    return date('Y-m-d H:i:s');
}
add_shortcode('wpdata_date', 'wpdata_shortcode_show_date');

После добавления этого кода в файл functions.php вашей темы или в плагин, вы сможете вставить в контент [wpdata_date], и на сайте отобразится текущая дата и время.

Это самый простой пример. Дальше рассмотрим более сложные и полезные сценарии.

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

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

Расширяем функцию:

function wpdata_shortcode_show_date_atts($atts) {
    $atts = shortcode_atts(
        array('format' => 'Y-m-d'),
        $atts,
        'wpdata_date'
    );
    return date($atts['format']);
}
add_shortcode('wpdata_date', 'wpdata_shortcode_show_date_atts');

Теперь можно использовать [wpdata_date format="d.m.Y H:i"], чтобы получить дату в формате день.месяц.год часы:минуты.

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

Вывод данных из базы данных WordPress

Одна из типичных задач — получить и показать данные из таблиц WordPress, например, список последних записей или пользовательские данные.

Пример шорткода, выводящего 5 последних заголовков публикаций:

function wpdata_shortcode_latest_posts($atts) {
    $atts = shortcode_atts(
        array('count' => 5), $atts, 'wpdata_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="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    wp_reset_postdata();
    $output .= '</ul>';

    return $output;
}
add_shortcode('wpdata_latest_posts', 'wpdata_shortcode_latest_posts');

Используйте [wpdata_latest_posts count="3"], чтобы вывести три последние записи. Это удобный способ встроить актуальный контент в любую часть сайта.

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

При работе с данными всегда учитывайте безопасность и обработку ошибок. Например, при получении параметров проверяйте типы и значения, чтобы избежать SQL-инъекций и XSS.

В нашем примере параметры count мы привели к целочисленному типу через intval(). Это минимальная, но важная мера.

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

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

$output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';

Создание комплексного шорткода с фильтрами и пагинацией

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

Код шорткода:

function wpdata_shortcode_posts_with_filters($atts) {
    global $wp_query;

    $atts = shortcode_atts(array(
        'category' => '',
        'posts_per_page' => 5,
        'paged' => 1
    ), $atts, 'wpdata_post_filters');

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'posts_per_page' => intval($atts['posts_per_page']),
        'category_name' => sanitize_text_field($atts['category']),
        'paged' => $paged,
        'post_status' => 'publish'
    );

    $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>';
    }
    $output .= '</ul>';

    // Пагинация
    $big = 999999999; // уникальное число для замены
    $pagination = paginate_links(array(
        'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
        'format' => '?paged=%#%',
        'current' => max(1, $paged),
        'total' => $query->max_num_pages
    ));

    if ($pagination) {
        $output .= '<nav class="wpdata-pagination">' . $pagination . '</nav>';
    }

    wp_reset_postdata();

    return $output;
}
add_shortcode('wpdata_post_filters', 'wpdata_shortcode_posts_with_filters');

Для вывода используйте [wpdata_post_filters category="news" posts_per_page="3"]. Это позволит гибко управлять списком публикаций с пагинацией прямо из контента.

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

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

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

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

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

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

  • Встраивать сложную логику в простой контент
  • Повысить гибкость и повторное использование кода
  • Облегчить работу редакторов и контент-менеджеров

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

WooCommerce: решение проблемы с неотображением атрибутов товара в корзине
05.07.2026
WooCommerce: как использовать хуки для корректного отображения цен в корзине
16.06.2026
Оптимизация сложных запросов с фильтрами в WordPress для больших объемов данных
03.02.2026
Оптимизация запросов по мета-значениям в WordPress
23.03.2026
Производительность и оптимизация запросов с методами кеширования в WordPress
11.12.2025