Шорткоды в 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.
Автоматический генератор шорткодов с поддержкой параметров значительно ускоряет разработку и упрощает поддержку функционала сайта. Такой подход позволяет создавать гибкие и расширяемые решения, адаптированные под разные задачи.