Шорткоды — это удобный способ вставлять динамический контент в записи, страницы и виджеты WordPress. Они позволяют разработчикам и пользователям без глубоких знаний PHP добавлять сложные функции с помощью простой конструкции в тексте.
Что такое шорткоды и зачем они нужны в WordPress
Шорткод — это специальный тег в квадратных скобках, например, [my_shortcode], который WordPress распознает и заменяет на определенный контент или функционал при выводе страницы. Это облегчает повторное использование кода и упрощает редактирование контента.
Пример использования: вы хотите вставить форму обратной связи, галерею изображений или интерактивный элемент без необходимости каждый раз писать сложный код.
Встроенные шорткоды есть у многих плагинов и тем, но иногда нужно создать свой, уникальный под задачи сайта.
Создание собственного шорткода: базовый пример
Для создания шорткода нужно написать функцию, которая возвращает нужный HTML или другой контент, и зарегистрировать ее через функцию add_shortcode.
Рассмотрим пример создания шорткода, который выводит приветствие с именем пользователя:
function wp_shablon_greeting_shortcode($atts) {
$atts = shortcode_atts(array(
'name' => 'Гость'
), $atts, 'greeting');
return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на наш сайт.</p>';
}
add_shortcode('greeting', 'wp_shablon_greeting_shortcode');Теперь в любом месте сайта вы можете вставить [greeting name="Алексей"], и появится текст: «Привет, Алексей! Добро пожаловать на наш сайт.»
Пояснения к коду
shortcode_attsпозволяет задать значения по умолчанию и получить атрибуты из шорткода.esc_htmlзащищает от XSS-уязвимостей, экранируя вывод.- Функция возвращает строку, а не выводит напрямую, это важно для корректной работы.
Расширение шорткода: добавляем сложную логику и стили
Шорткод может выполнять запросы к базе, выводить списки постов, интегрироваться с API и т.д. Рассмотрим пример шорткода, который выводит последние 3 записи из категории с кастомным оформлением.
function wp_shablon_latest_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'cat' => '',
'count' => 3
), $atts, 'latest_posts');
$args = array(
'posts_per_page' => intval($atts['count']),
'category_name' => sanitize_text_field($atts['cat'])
);
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Нет записей для отображения.</p>';
}
$output = '<ul class="wp-shablon-latest-posts">';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
// Добавим стили для списка
$output .= '<style>
.wp-shablon-latest-posts { list-style: disc inside; padding-left: 0; }
.wp-shablon-latest-posts li { margin-bottom: 8px; }
</style>';
return $output;
}
add_shortcode('latest_posts', 'wp_shablon_latest_posts_shortcode');Используйте шорткод [latest_posts cat="novosti" count="5"], чтобы вывести 5 последних постов из категории «новости».
Что важно учесть
При написании шорткодов с запросами нужно обязательно сбрасывать глобальные посты через wp_reset_postdata(), чтобы избежать конфликтов с основным циклом WordPress.
Также старайтесь санитизировать входные параметры, чтобы защитить сайт от инъекций.
Популярные плагины для работы с шорткодами в WordPress
Если не хочется писать собственный код, можно использовать готовые решения. Вот несколько полезных плагинов:
- Shortcodes Ultimate — большой набор различных шорткодов с визуальным редактором.
- WP Shortcode — удобный набор для вставки кнопок, колонок, панелей и других элементов.
- Custom Shortcodes — позволяет создавать свои шорткоды через интерфейс без кодирования.
Однако если вам нужна уникальная логика, лучше создавать свои шорткоды, чтобы не перегружать сайт лишними скриптами.
Советы по оптимизации и безопасности шорткодов
Шорткоды, особенно с динамическим контентом, могут повлиять на производительность и безопасность сайта:
- Минимизируйте количество запросов в базе внутри шорткодов.
- Всегда проверяйте и фильтруйте входящие параметры.
- Не выводите напрямую пользовательский ввод без экранирования.
- Кэшируйте результат, если контент не меняется часто.
Например, можно использовать транзиенты WordPress для кэширования:
function wp_shablon_cached_shortcode() {
$cache_key = 'wp_shablon_cached_content';
$content = get_transient($cache_key);
if (false === $content) {
// Дорогая операция, например, запрос к API или сложный запрос к базе
$content = '<p>Динамический контент с кэшем</p>';
// Кэшируем на 1 час
set_transient($cache_key, $content, HOUR_IN_SECONDS);
}
return $content;
}
add_shortcode('cached_content', 'wp_shablon_cached_shortcode');