Шорткоды — это мощный инструмент WordPress, который позволяет вставлять сложный функционал в записи, страницы и виджеты без необходимости писать много кода в самом контенте. В этой статье мы подробно рассмотрим, как создать собственный шорткод, который будет выполнять именно ту задачу, которую вы перед ним поставите.
Что такое шорткод в WordPress и зачем он нужен
Шорткод — это короткая метка в квадратных скобках, например [wpreboot_gallery], которая при отображении сайта автоматически заменяется на динамический контент. Это упрощает работу с контентом: вместо копирования большого HTML или PHP кода, вы просто вставляете шорткод.
Основные преимущества шорткодов:
- Удобство для контент-менеджеров — не нужно знать код.
- Повторное использование кода на разных страницах.
- Разделение логики и контента.
Создавая собственный шорткод, вы получаете гибкий инструмент, который можно адаптировать под любые задачи — от вывода галерей и форм до сложных интерактивных элементов.
Как зарегистрировать собственный шорткод в WordPress
Для создания шорткода нужно написать функцию, которая будет формировать нужный вывод, и зарегистрировать её с помощью функции add_shortcode. Обычно код добавляют в файл functions.php вашей темы или создают отдельный плагин.
Пример создания простого шорткода, который выводит приветствие:
function wpreboot_hello_shortcode($atts) {
$atts = shortcode_atts(array(
'name' => 'Гость'
), $atts, 'wpreboot_hello');
return '<p>Привет, ' . esc_html($atts['name']) . '! Добро пожаловать на сайт.</p>';
}
add_shortcode('wpreboot_hello', 'wpreboot_hello_shortcode');Теперь в любом месте контента вы можете использовать [wpreboot_hello name="Алексей"], и на сайте выведется: Привет, Алексей! Добро пожаловать на сайт.
Опции и атрибуты шорткода — как передавать параметры
Очень часто шорткоду нужно передавать параметры, чтобы изменять вывод. Как в примере выше, мы использовали функцию shortcode_atts, которая объединяет переданные атрибуты с дефолтными значениями.
Пример более сложного шорткода для вывода списка последних записей:
function wpreboot_recent_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'count' => 5,
'category' => ''
), $atts, 'wpreboot_recent_posts');
$args = array(
'posts_per_page' => intval($atts['count']),
'post_status' => 'publish'
);
if (!empty($atts['category'])) {
$args['category_name'] = sanitize_text_field($atts['category']);
}
$posts = get_posts($args);
if (empty($posts)) {
return '<p>Записей не найдено.</p>';
}
$output = '<ul>';
foreach ($posts as $post) {
$output .= '<li><a href="' . get_permalink($post) . '">' . esc_html(get_the_title($post)) . '</a></li>';
}
$output .= '</ul>';
return $output;
}
add_shortcode('wpreboot_recent_posts', 'wpreboot_recent_posts_shortcode');Этот шорткод можно использовать так: [wpreboot_recent_posts count="3" category="news"], и он выведет 3 последние записи из категории "news".
Примеры полезных пользовательских шорткодов
1. Шорткод для вывода контактной информации
Вы можете создать шорткод, который выводит контакты с возможностью менять номер телефона или email через атрибуты:
function wpreboot_contact_shortcode($atts) {
$atts = shortcode_atts(array(
'phone' => '+7 (999) 123-45-67',
'email' => 'info@example.com'
), $atts, 'wpreboot_contact');
return '<div class="contact-info">'
. '<p>Телефон: <a href="tel:' . esc_attr($atts['phone']) . '">' . esc_html($atts['phone']) . '</a></p>'
. '<p>Email: <a href="mailto:' . esc_attr($atts['email']) . '">' . esc_html($atts['email']) . '</a></p>'
. '</div>';
}
add_shortcode('wpreboot_contact', 'wpreboot_contact_shortcode');Используйте в контенте: [wpreboot_contact phone="+7 (912) 345-67-89" email="contact@site.ru"].
2. Встраиваем Google карту через шорткод
Если нужно вставить карту с определённым адресом, можно сделать так:
function wpreboot_google_map_shortcode($atts) {
$atts = shortcode_atts(array(
'address' => 'Москва, Красная площадь',
'width' => '600',
'height' => '450'
), $atts, 'wpreboot_map');
$address = urlencode($atts['address']);
$width = intval($atts['width']);
$height = intval($atts['height']);
$iframe = '<iframe src="https://www.google.com/maps?q=' . $address . '&output=embed" width="' . $width . '" height="' . $height . '" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>';
return $iframe;
}
add_shortcode('wpreboot_map', 'wpreboot_google_map_shortcode');Вставляйте в контент: [wpreboot_map address="Санкт-Петербург, Невский проспект" width="800" height="600"].
Советы по безопасности и производительности при создании шорткодов
При работе с шорткодами важно учитывать несколько правил:
- Экранирование вывода. Всегда используйте функции
esc_html,esc_attrи подобные для защиты от XSS-атак. - Валидация и очистка входящих данных. Никогда не доверяйте пользовательскому вводу, даже если он передаётся через атрибуты шорткода.
- Минимизируйте нагрузку. Если шорткод выполняет запросы к базе, кэшируйте результаты или используйте transient API, чтобы не нагружать сервер.
- Не выводите напрямую HTML с PHP-кодом. Формируйте строку с выводом и возвращайте её из функции.
Как превратить шорткод в плагин для WordPress
Если вы хотите, чтобы ваш шорткод был независим от темы и мог использоваться на любом сайте, лучше оформить его в виде плагина. Для этого создайте папку в wp-content/plugins, например wpreboot-shortcodes, и файл wpreboot-shortcodes.php с таким содержимым:
<?php
/**
* Plugin Name: WPreboot Shortcodes
* Description: Набор кастомных шорткодов для сайта WPreboot
* Version: 1.0
* Author: WPreboot
*/
function wpreboot_hello_shortcode($atts) {
$atts = shortcode_atts(array('name' => 'Гость'), $atts, 'wpreboot_hello');
return '<p>Привет, ' . esc_html($atts['name']) . '!</p>';
}
add_shortcode('wpreboot_hello', 'wpreboot_hello_shortcode');
// Добавляйте другие шорткоды здесь
Затем активируйте плагин через админку WordPress. Теперь ваши шорткоды будут работать независимо от активной темы.
Итоги и рекомендации
Создание собственных шорткодов — один из ключевых навыков разработчика WordPress, позволяющий расширять функционал сайта и упрощать работу с контентом. Используйте приведённые примеры и адаптируйте их под свои задачи. Не забывайте о безопасности и производительности, чтобы ваш сайт оставался быстрым и надёжным.