Как создать автоматический генератор шорткодов в WordPress с поддержкой параметров

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

Зачем нужен автоматический генератор шорткодов

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

  • Регистрировать множество шорткодов с минимальным повторением кода;
  • Управлять выводом через единый шаблон;
  • Обеспечить поддержку параметров для кастомизации вывода;
  • Упростить масштабирование функционала без дублирования кода.

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

Как реализовать генератор шорткодов в WordPress

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

Регистрация шорткодов через цикл

Допустим, нам надо зарегистрировать несколько шорткодов для вывода блоков с разными параметрами — например, [wp_gpt_box], [wp_gpt_alert], [wp_gpt_note]. Вместо того, чтобы создавать 3 разных функции, создадим универсальную:

function wpgpt_register_dynamic_shortcodes() {
    $shortcodes = [
        'wp_gpt_box' => ['class' => 'box', 'default_text' => 'Это блок Box'],
        'wp_gpt_alert' => ['class' => 'alert', 'default_text' => 'Внимание!'],
        'wp_gpt_note' => ['class' => 'note', 'default_text' => 'Заметка']
    ];

    foreach ($shortcodes as $tag => $args) {
        add_shortcode($tag, function($atts) use ($args, $tag) {
            return wpgpt_dynamic_shortcode_handler($atts, $args, $tag);
        });
    }
}
add_action('init', 'wpgpt_register_dynamic_shortcodes');

В этом коде мы определяем список шорткодов с параметрами и регистрируем их через анонимные функции, которые вызывают один обработчик.

Обработка параметров и вывод

Теперь создадим функцию-обработчик wpgpt_dynamic_shortcode_handler, которая принимает входящие атрибуты, объединяет их с дефолтными и формирует HTML:

function wpgpt_dynamic_shortcode_handler($atts, $args, $tag) {
    // Устанавливаем значения по умолчанию
    $defaults = [
        'text' => $args['default_text'],
        'color' => 'black',
        'font_size' => '14px'
    ];

    // Объединяем с атрибутами из шорткода
    $atts = shortcode_atts($defaults, $atts, $tag);

    // Формируем стиль
    $style = sprintf('color:%s; font-size:%s;', esc_attr($atts['color']), esc_attr($atts['font_size']));

    // Возвращаем HTML блок
    return sprintf('<div class="%s" style="%s">%s</div>', esc_attr($args['class']), $style, esc_html($atts['text']));
}

Такой обработчик универсален и позволяет в шорткоде указывать параметры text, color, font_size. Например:

[wp_gpt_alert text="Ошибка!" color="#ff0000" font_size="16px"]

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

Вложенные шорткоды

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

function wpgpt_dynamic_shortcode_handler($atts, $args, $tag) {
    $defaults = [
        'text' => $args['default_text'],
        'color' => 'black',
        'font_size' => '14px'
    ];
    $atts = shortcode_atts($defaults, $atts, $tag);
    $style = sprintf('color:%s; font-size:%s;', esc_attr($atts['color']), esc_attr($atts['font_size']));

    // Обрабатываем вложенные шорткоды в тексте
    $content = do_shortcode($atts['text']);
    return sprintf('<div class="%s" style="%s">%s</div>', esc_attr($args['class']), $style, $content);
}

Кеширование вывода

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

function wpgpt_dynamic_shortcode_handler($atts, $args, $tag) {
    $defaults = [
        'text' => $args['default_text'],
        'color' => 'black',
        'font_size' => '14px'
    ];
    $atts = shortcode_atts($defaults, $atts, $tag);

    $cache_key = 'wpgpt_sc_' . md5($tag . serialize($atts));
    $output = get_transient($cache_key);
    if (false === $output) {
        $style = sprintf('color:%s; font-size:%s;', esc_attr($atts['color']), esc_attr($atts['font_size']));
        $content = do_shortcode($atts['text']);
        $output = sprintf('<div class="%s" style="%s">%s</div>', esc_attr($args['class']), $style, $content);
        set_transient($cache_key, $output, 3600); // кеш 1 час
    }
    return $output;
}

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

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

  • Clearfy Pro — для оптимизации и ускорения загрузки шорткодов;
  • WPRemark — для управления комментариями и генерации контента в шорткодах;
  • WPGPT — для интеграции GPT и генерации контента внутри шорткодов.

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

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

  • Использовать esc_html и esc_attr для вывода, чтобы избежать XSS;
  • Проверять и валидировать входящие параметры;
  • Тестировать шорткоды на разных страницах и с разными параметрами;
  • Использовать кеширование для снижения нагрузки при больших объемах вызовов;
  • Регулярно обновлять и поддерживать код для совместимости с WordPress.

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

Как удалить неиспользуемые медиа файлы в WordPress
10.12.2025
Как добавить обсуждения в REST API WordPress с поддержкой GPT
25.01.2026
Как создать автоматический генератор вопросов для квиза на WordPress с помощью WPGPT
08.02.2026
Как создать автономный чат-бот на WordPress с помощью WPGPT
29.12.2025
Как создать динамический виджет WordPress с использованием GPT
05.01.2026