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

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

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

Шорткод — это упрощённый способ вставки динамического контента в редактор WordPress. Например, стандартный шорткод [gallery] выводит галерею изображений. Атрибуты шорткода позволяют менять его поведение и внешний вид, например [gallery ids="1,2,3"] для вывода конкретных картинок.

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

Пример простого шорткода без атрибутов

function wpchecker_simple_shortcode() {
    return '<strong>Привет, мир!</strong>';
}
add_shortcode('wpchecker_hello', 'wpchecker_simple_shortcode');

Вызов [wpchecker_hello] выведет жирный текст. Но без атрибутов такой шорткод не гибкий.

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

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

Рассмотрим пример шорткода [wpchecker_box color="цвет" width="ширина"]текст[/wpchecker_box], который выводит цветной блок с указанной шириной и текстом внутри.

function wpchecker_box_shortcode($atts, $content = null) {
    // Определяем атрибуты и их значения по умолчанию
    $atts = shortcode_atts(array(
        'color' => 'lightblue',
        'width' => '300px'
    ), $atts, 'wpchecker_box');

    // Экранируем атрибуты для безопасности
    $color = esc_attr($atts['color']);
    $width = esc_attr($atts['width']);

    // Экранируем контент, разрешая базовый HTML
    $content = wp_kses_post($content);

    // Формируем HTML блока
    $html = "<div style=\"background-color: {$color}; width: {$width}; padding: 15px; border-radius: 5px;\">" . $content . "</div>";

    return $html;
}
add_shortcode('wpchecker_box', 'wpchecker_box_shortcode');

Такой шорткод позволяет использоваться так:

[wpchecker_box color="#f0c" width="400px"]Текст внутри цветного блока[/wpchecker_box]

Результат — стилизованный блок с заданными цветом и шириной.

Обработка ошибок и валидация атрибутов

Важно валидировать и фильтровать входящие значения атрибутов. Например, убедиться, что width содержит допустимые единицы измерения.

Пример валидации ширины:

function wpchecker_validate_width($width) {
    if (preg_match('/^\d+(px|em|rem|%)$/', $width)) {
        return $width;
    }
    return '300px'; // значение по умолчанию
}

Далее в основном шорткоде заменяем $width = esc_attr($atts['width']); на $width = wpchecker_validate_width($atts['width']);.

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

После регистрации шорткода его можно использовать в классическом редакторе, Gutenberg, а также в виджетах с поддержкой шорткодов.

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

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

  • Shortcodes Ultimate — коллекция готовых шорткодов с удобным интерфейсом.
  • WPBakery Page Builder и Elementor — позволяют вставлять и настраивать шорткоды в визуальном редакторе.
  • My Popup от WPSHOP — поддерживает добавление пользовательских шорткодов для вывода всплывающих окон.

Расширение функционала: шорткод с AJAX

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

Пример базовой реализации AJAX-запроса для шорткода:

function wpchecker_ajax_comments_shortcode() {
    wp_enqueue_script('wpchecker-ajax-script', get_template_directory_uri() . '/js/wpchecker-ajax.js', array('jquery'), null, true);
    wp_localize_script('wpchecker-ajax-script', 'wpchecker_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
    return '<div id="wpchecker-comments"><button id="load-comments">Загрузить комментарии</button><div id="comments-list"></div></div>';
}
add_shortcode('wpchecker_ajax_comments', 'wpchecker_ajax_comments_shortcode');

function wpchecker_load_comments() {
    $comments = get_comments(array('number' => 5, 'status' => 'approve'));
    $output = '';
    foreach ($comments as $comment) {
        $output .= '<p><strong>' . esc_html($comment->comment_author) . '</strong>: ' . esc_html($comment->comment_content) . '</p>';
    }
    echo $output;
    wp_die();
}
add_action('wp_ajax_wpchecker_load_comments', 'wpchecker_load_comments');
add_action('wp_ajax_nopriv_wpchecker_load_comments', 'wpchecker_load_comments');

JavaScript (файл wpchecker-ajax.js):

jQuery(document).ready(function($) {
    $('#load-comments').on('click', function() {
        $.ajax({
            url: wpchecker_ajax_obj.ajax_url,
            type: 'POST',
            data: {
                action: 'wpchecker_load_comments'
            },
            success: function(response) {
                $('#comments-list').html(response);
            },
            error: function() {
                alert('Ошибка загрузки комментариев');
            }
        });
    });
});

Заключение по созданию шорткодов с атрибутами

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

Для удобной работы с отзывами и рейтингами, можно рассмотреть плагин Expert Review от WPSHOP, который поддерживает вывод через шорткоды с настройками через атрибуты.

Как отладить проблемы с выводом картинок в WordPress
27.01.2026
Как автоматизировать обновления WordPress и плагинов
24.11.2025
Как использовать meta запросы в WordPress для эффективного поиска и фильтрации
27.02.2026
Как удалить пустые и неиспользуемые термины в WordPress
08.02.2026
WooCommerce: как автоматически удалить товар после продажи
27.06.2026