Как сделать динамические атрибуты для шорткодов в WordPress

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

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

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

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

В WordPress атрибуты передаются в шорткод в виде массива, и задача разработчика — корректно их обработать и применить.

Как зарегистрировать шорткод с динамическими атрибутами

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

function wpbuy_dynamic_button_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'text' => 'Кнопка',
            'color' => 'blue',
            'size' => 'medium'
        ), $atts, 'wpbuy_button'
    );

    $style = '';
    if ($atts['color'] === 'red') {
        $style .= 'background-color: red; color: white;';
    } elseif ($atts['color'] === 'green') {
        $style .= 'background-color: green; color: white;';
    } else {
        $style .= 'background-color: blue; color: white;';
    }

    $class_size = '';
    switch ($atts['size']) {
        case 'small':
            $class_size = 'btn-small';
            break;
        case 'large':
            $class_size = 'btn-large';
            break;
        default:
            $class_size = 'btn-medium';
            break;
    }

    return '<button class="wpbuy-btn '. esc_attr($class_size) .'" style="'. esc_attr($style) .'">' . esc_html($atts['text']) . '</button>';
}
add_shortcode('wpbuy_button', 'wpbuy_dynamic_button_shortcode');

В этом примере шорткод [wpbuy_button] принимает три атрибута: text — текст кнопки, color — цвет, и size — размер. Если атрибут не передан, используется значение по умолчанию.

Практические рекомендации по работе с динамическими атрибутами

Валидация и очистка данных

Очень важно всегда фильтровать и экранировать входящие данные, чтобы избежать XSS-уязвимостей и проблем с безопасностью. Используйте функции esc_attr(), esc_html() и подобные, когда выводите атрибуты в HTML.

Обработка необязательных и обязательных параметров

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

Поддержка нескольких форматов атрибутов

Иногда полезно принимать сложные параметры, например списки через запятую, JSON или сериализованные данные. В таких случаях нужно парсить строки и преобразовывать их в массивы или объекты для удобной работы в PHP.

Пример: шорткод с динамическим списком товаров

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

function wpbuy_products_list_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'ids' => '',
        ), $atts, 'wpbuy_products'
    );

    if (empty($atts['ids'])) {
        return '<p>Параметр ids обязателен.</p>';
    }

    $ids_array = array_map('intval', explode(',', $atts['ids']));
    if (empty($ids_array)) {
        return '<p>Неверный формат параметра ids.</p>';
    }

    ob_start();
    echo '<ul class="wpbuy-products-list">';
    foreach ($ids_array as $id) {
        $product = get_post($id);
        if ($product && $product->post_type === 'product') {
            echo '<li><a href="' . get_permalink($id) . '">' . esc_html($product->post_title) . '</a></li>';
        }
    }
    echo '</ul>';

    return ob_get_clean();
}
add_shortcode('wpbuy_products', 'wpbuy_products_list_shortcode');

Теперь вызов шорткода вида [wpbuy_products ids="123,456,789"] выведет список товаров с указанными ID. Такой подход удобен для вывода кастомных подборок без дополнительного кода в шаблонах.

Как интегрировать с плагинами WPShop и расширить функционал

Если вы используете на сайте плагины с WPSHOP, например, WPGPT или Clearfy Pro, то динамические атрибуты шорткодов помогут существенно расширить возможности без глубоких изменений в коде. Например, с помощью WPGPT можно генерировать динамический текст, а через Clearfy Pro — оптимизировать вывод и снизить нагрузку.

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

Итоговые советы по работе с динамическими атрибутами

  • Всегда задавайте значения по умолчанию через shortcode_atts.
  • Проверяйте и валидируйте входящие параметры.
  • Используйте экранирование вывода для безопасности.
  • Документируйте параметры, чтобы пользователям было понятно, как использовать шорткод.
  • Тестируйте шорткод с разными наборами атрибутов.
WooCommerce: как найти и исправить дублирующиеся артикулы (SKU) в продуктах
04.05.2026
WooCommerce: как автоматически удалять неактивные заказы
23.04.2026
Как удалить проблему раздвоенного общего меню в WordPress
28.02.2026
Как добавить уникальное пользовательское поле в регистрацию WordPress
23.01.2026
Как создать автоматический импорт продуктов в WooCommerce с примерами кода
13.04.2026