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

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

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

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

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

Регистрация собственного шорткода в WordPress

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

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

function wpone_current_date_shortcode() {
    return date('d.m.Y');
}
add_shortcode('wpone_date', 'wpone_current_date_shortcode');

Теперь в любом месте контента можно вставить [wpone_date], и он выведет текущую дату.

Обратите внимание на префикс wpone_ в названии функции — это хорошая практика для избежания конфликтов с другими плагинами.

Работа с атрибутами шорткода: примеры и лучшие практики

Очень часто шорткод должен принимать параметры (атрибуты) для гибкой настройки вывода. Для разбора атрибутов используется функция shortcode_atts(), которая задаёт значения по умолчанию и объединяет их с переданными пользователем.

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

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

Использование в контенте: [wpone_greeting name="Алексей"] выведет «Привет, Алексей!». Если атрибут name не задан, выведется «Привет, Гость!».

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

Создание шорткода с вложенным HTML и динамическим контентом

Шорткоды часто используются для вывода сложной разметки, например, таблиц, списков или элементов интерфейса. Рассмотрим пример шорткода, который выводит список последних 5 постов с ссылками:

function wpone_latest_posts_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'count' => 5,
        ),
        $atts,
        'wpone_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 class="wpone-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>';

    return $output;
}
add_shortcode('wpone_latest_posts', 'wpone_latest_posts_shortcode');

Вызов [wpone_latest_posts count="3"] выведет список из трёх последних публикаций с ссылками.

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

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

Иногда нужно создавать шорткоды, которые взаимодействуют с функционалом сторонних плагинов. Например, интеграция с плагином Advanced Custom Fields (ACF) позволяет выводить пользовательские поля в удобном формате.

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

function wpone_acf_field_shortcode($atts) {
    $atts = shortcode_atts(array(
        'field' => '',
    ), $atts, 'wpone_acf_field');

    if (empty($atts['field'])) {
        return '';
    }

    if (!function_exists('get_field')) {
        return '';
    }

    $value = get_field($atts['field']);
    return esc_html($value);
}
add_shortcode('wpone_acf_field', 'wpone_acf_field_shortcode');

Теперь в контенте можно использовать [wpone_acf_field field="subtitle"], чтобы вывести поле с ключом «subtitle» для текущей записи.

Это упрощает создание динамического контента без необходимости писать PHP в шаблонах.

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

При реализации шорткодов важно учитывать несколько моментов для обеспечения безопасности и оптимальной работы сайта:

  • Экранирование вывода. Всегда используйте функции типа esc_html(), esc_url() и другие для очистки данных перед выводом.
  • Проверка входных данных. При работе с атрибутами шорткода проверяйте и фильтруйте значения, особенно если они влияют на запросы к базе данных.
  • Минимизация запросов. Избегайте избыточных WP_Query внутри шорткодов, чтобы не снижать производительность. Кешируйте результаты, если это возможно.
  • Использование префиксов. Добавляйте уникальные префиксы к функциям и именам шорткодов, чтобы избежать конфликтов с другими плагинами или темами.

Расширение функционала: шорткоды с вложенными шорткодами и параметрами

Иногда шорткоды должны поддерживать вложенность и более сложные сценарии. WordPress позволяет создавать шорткоды с содержимым между тегами:

function wpone_box_shortcode($atts, $content = null) {
    $atts = shortcode_atts(array(
        'title' => 'Заголовок',
    ), $atts, 'wpone_box');

    $output = '<div class="wpone-box">';
    $output .= '<h3>' . esc_html($atts['title']) . '</h3>';
    $output .= '<div class="wpone-box-content">' . do_shortcode($content) . '</div>';
    $output .= '</div>';
    return $output;
}
add_shortcode('wpone_box', 'wpone_box_shortcode');

Теперь можно писать в контенте:

[wpone_box title="Важное сообщение"]Текст с вложенным шорткодом [wpone_greeting name="Ирина"][/wpone_box]

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

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

Как использовать AJAX в формах WordPress без плагинов
29.01.2026
Как создать собственный виджет в WordPress: пошаговое руководство
17.11.2025
Как использовать WPCommunity для создания приватного клубного сайта на WordPress
19.01.2026
Как вывести многоязычный контент в WordPress с помощью WPML
30.03.2026
Как использовать WPONE REST API для получения данных и мета пользователя в WordPress
26.01.2026