Шорткоды в WordPress — мощный инструмент для вставки динамического контента в посты и страницы. Однако стандартные шорткоды часто требуют фиксированных параметров, что ограничивает их гибкость. В этой статье мы разберем, как создавать шорткоды с динамическими атрибутами, позволяющими пользователям задавать параметры в момент вставки шорткода, а также реализуем обработку этих атрибутов на уровне кода.
Зачем нужны динамические атрибуты в шорткодах WordPress
Динамические атрибуты позволяют расширить функциональность шорткода, делая его адаптивным к различным сценариям использования. Например, вы можете создавать шорткод для отображения кнопки, где цвет, текст и ссылка задаются непосредственно в шорткоде. Это удобнее, чем создавать отдельный шорткод под каждый вариант.
Преимущества динамических атрибутов:
- Гибкость и универсальность шорткодов.
- Уменьшение количества дублирующегося кода.
- Улучшение UX для контент-менеджеров.
Рассмотрим практический пример.
Создаем простой шорткод с динамическими атрибутами
Допустим, нам нужен шорткод для отображения кнопки с настраиваемым текстом, URL и цветом фона.
Добавьте следующий код в файл functions.php вашей темы или в плагин:
function wpeditor_button_shortcode($atts) {
// Устанавливаем значения по умолчанию
$atts = shortcode_atts(
array(
'text' => 'Нажми меня',
'url' => '#',
'color' => '#0073aa'
), $atts, 'wpeditor_button'
);
// Формируем HTML кнопки
$html = '<a href="' . esc_url($atts['url']) . '" ' .
'style="background-color:' . esc_attr($atts['color']) . '; ' .
'color:#fff; padding:10px 20px; text-decoration:none; border-radius:4px;">' .
esc_html($atts['text']) .
'</a>';
return $html;
}
add_shortcode('wpeditor_button', 'wpeditor_button_shortcode');Теперь вы можете использовать шорткод так:
[wpeditor_button text="Перейти на сайт" url="https://wpeditor.ru" color="#e74c3c"]
И получите стилизованную кнопку с заданным текстом, ссылкой и цветом фона.
Обработка сложных атрибутов: массивы и JSON
Иногда требуется передать в шорткод сложные данные: списки, настройки или даже JSON. WordPress не поддерживает массивы напрямую в атрибутах шорткода, но есть способы обхода.
Например, можно передавать строку с разделителем и в коде преобразовывать ее в массив:
function wpeditor_list_shortcode($atts) {
$atts = shortcode_atts(array(
'items' => ''
), $atts, 'wpeditor_list');
$items = explode(',', $atts['items']); // разделяем строку по запятым
$html = '<ul>';
foreach ($items as $item) {
$html .= '<li>' . esc_html(trim($item)) . '</li>';
}
$html .= '</ul>';
return $html;
}
add_shortcode('wpeditor_list', 'wpeditor_list_shortcode');Использование:
[wpeditor_list items="яблоко,банан,вишня"]
Выведет маркированный список с тремя элементами.
Передача JSON и его декодирование
Если нужно передать более сложную структуру, можно закодировать JSON и передать его в атрибут, а в php — декодировать:
function wpeditor_json_shortcode($atts) {
$atts = shortcode_atts(array(
'data' => '{}'
), $atts, 'wpeditor_json');
$data = json_decode(stripslashes($atts['data']), true);
if (!$data) {
return '<p>Неверный формат данных</p>';
}
$html = '<div>';
foreach ($data as $key => $value) {
$html .= '<p>' . esc_html($key) . ': ' . esc_html($value) . '</p>';
}
$html .= '</div>';
return $html;
}
add_shortcode('wpeditor_json', 'wpeditor_json_shortcode');Пример использования:
[wpeditor_json data='{"name":"Иван","age":"30","city":"Москва"}']
Такой подход удобен для передачи комплексных данных, когда другие методы не подходят.
Рекомендации по безопасности и оптимизации
Работая с динамическими атрибутами, важно правильно обрабатывать входящие данные, чтобы избежать уязвимостей XSS и других атак. Используйте функции esc_html(), esc_attr(), esc_url() для экранирования вывода.
Также учитывайте производительность: если шорткод выполняет тяжелые операции, кешируйте результат с помощью Transients API или других методов.
Пример кеширования результата шорткода
function wpeditor_cached_shortcode($atts) {
$cache_key = 'wpeditor_cached_shortcode';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
// Здесь тяжелая логика генерации контента
$content = '<p>Динамический контент с кешированием</p>';
set_transient($cache_key, $content, 12 * HOUR_IN_SECONDS);
return $content;
}
add_shortcode('wpeditor_cached', 'wpeditor_cached_shortcode');Это повысит быстродействие сайта при частом использовании шорткода.
Плагины для расширения функционала шорткодов
Если хочется пойти дальше и не писать код с нуля, можно использовать готовые плагины, которые позволяют создавать шорткоды с динамическими атрибутами через интерфейс.
- Clearfy Pro — оптимизационный плагин с расширенными возможностями по работе со шорткодами и настройками сайта.
- WPRemark — плагин для автоматизации комментариев, который также поддерживает пользовательские шорткоды.
Эти инструменты помогут расширить функционал без глубокого программирования.
Итог
Динамические атрибуты в шорткодах — это удобный способ адаптировать контент под разные задачи, не создавая множество отдельных шорткодов. Используйте shortcode_atts() для обработки параметров, обрабатывайте данные безопасно и при необходимости применяйте кеширование для повышения производительности. Если хочется упростить задачу, используйте проверенные плагины из каталога WPSHOP.