Что такое шорткоды в WordPress и зачем они нужны
Шорткоды — это мощный инструмент WordPress, позволяющий вставлять функциональные элементы в записи, страницы или виджеты с помощью коротких текстовых меток в квадратных скобках, например, [gallery]. Они значительно упрощают управление контентом, избегая необходимости писать сложный HTML или PHP прямо в редакторе.
Создание собственных шорткодов позволяет разработчикам расширить функциональность сайта, внедрять уникальные решения и упрощать работу для контент-менеджеров. Например, можно создать шорткод, который выводит список последних новостей в определённом формате или интегрирует данные из внешних API.
В этой статье мы подробно разберём, как создать собственный шорткод, зарегистрировать его, обработать атрибуты и вывести динамический контент.
Регистрация собственного шорткода в WordPress
Для создания шорткода используется функция add_shortcode. Она принимает два аргумента: имя шорткода и функцию обратного вызова, которая будет генерировать вывод.
Рассмотрим простой пример создания шорткода, который выводит текущую дату:
function wpone_current_date_shortcode() {
return date('d.m.Y');
}
add_shortcode('wpone_date', 'wpone_current_date_shortcode');Теперь в любом месте контента можно вставить [wpone_date], и он выведет текущую дату.
Обратите внимание на префикс wpone_ в названии функции — это хорошая практика для избежания конфликтов с другими плагинами.
Работа с атрибутами шорткода: примеры и лучшие практики
Очень часто шорткод должен принимать параметры (атрибуты) для гибкой настройки вывода. Для разбора атрибутов используется функция shortcode_atts(), которая задаёт значения по умолчанию и объединяет их с переданными пользователем.
Пример: создадим шорткод, который выводит приветствие с именем пользователя:
function wpone_greeting_shortcode($atts) {
$atts = shortcode_atts(
array(
'name' => 'Гость',
),
$atts,
'wpone_greeting'
);
return 'Привет, ' . esc_html($atts['name']) . '!';
}
add_shortcode('wpone_greeting', 'wpone_greeting_shortcode');Использование в контенте: [wpone_greeting name="Алексей"] выведет «Привет, Алексей!». Если атрибут name не задан, выведется «Привет, Гость!».
Важно всегда использовать функции экранирования, например, esc_html(), чтобы предотвратить XSS-уязвимости.
Создание шорткода с вложенным HTML и динамическим контентом
Шорткоды часто используются для вывода сложной разметки, например, таблиц, списков или элементов интерфейса. Рассмотрим пример шорткода, который выводит список последних 5 постов с ссылками:
function wpone_latest_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'count' => 5,
),
$atts,
'wpone_latest_posts'
);
$query = new WP_Query(array(
'posts_per_page' => intval($atts['count']),
'post_status' => 'publish',
));
if (!$query->have_posts()) {
return '<p>Посты не найдены.</p>';
}
$output = '<ul class="wpone-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>';
return $output;
}
add_shortcode('wpone_latest_posts', 'wpone_latest_posts_shortcode');Вызов [wpone_latest_posts count="3"] выведет список из трёх последних публикаций с ссылками.
Такой шорткод можно использовать в любом месте сайта, что даёт гибкость и удобство.
Интеграция популярных плагинов с собственными шорткодами
Иногда нужно создавать шорткоды, которые взаимодействуют с функционалом сторонних плагинов. Например, интеграция с плагином Advanced Custom Fields (ACF) позволяет выводить пользовательские поля в удобном формате.
Пример шорткода, выводящего значение поля ACF для текущей записи:
function wpone_acf_field_shortcode($atts) {
$atts = shortcode_atts(array(
'field' => '',
), $atts, 'wpone_acf_field');
if (empty($atts['field'])) {
return '';
}
if (!function_exists('get_field')) {
return '';
}
$value = get_field($atts['field']);
return esc_html($value);
}
add_shortcode('wpone_acf_field', 'wpone_acf_field_shortcode');Теперь в контенте можно использовать [wpone_acf_field field="subtitle"], чтобы вывести поле с ключом «subtitle» для текущей записи.
Это упрощает создание динамического контента без необходимости писать PHP в шаблонах.
Советы по безопасности и производительности при создании шорткодов
При реализации шорткодов важно учитывать несколько моментов для обеспечения безопасности и оптимальной работы сайта:
- Экранирование вывода. Всегда используйте функции типа
esc_html(),esc_url()и другие для очистки данных перед выводом. - Проверка входных данных. При работе с атрибутами шорткода проверяйте и фильтруйте значения, особенно если они влияют на запросы к базе данных.
- Минимизация запросов. Избегайте избыточных WP_Query внутри шорткодов, чтобы не снижать производительность. Кешируйте результаты, если это возможно.
- Использование префиксов. Добавляйте уникальные префиксы к функциям и именам шорткодов, чтобы избежать конфликтов с другими плагинами или темами.
Расширение функционала: шорткоды с вложенными шорткодами и параметрами
Иногда шорткоды должны поддерживать вложенность и более сложные сценарии. WordPress позволяет создавать шорткоды с содержимым между тегами:
function wpone_box_shortcode($atts, $content = null) {
$atts = shortcode_atts(array(
'title' => 'Заголовок',
), $atts, 'wpone_box');
$output = '<div class="wpone-box">';
$output .= '<h3>' . esc_html($atts['title']) . '</h3>';
$output .= '<div class="wpone-box-content">' . do_shortcode($content) . '</div>';
$output .= '</div>';
return $output;
}
add_shortcode('wpone_box', 'wpone_box_shortcode');Теперь можно писать в контенте:
[wpone_box title="Важное сообщение"]Текст с вложенным шорткодом [wpone_greeting name="Ирина"][/wpone_box]
Это выведет блок с заголовком и содержимым, где вложенный шорткод будет корректно обработан.
Такой подход даёт огромную гибкость для построения сложных интерфейсов и элементов.