Что такое шорткод в WordPress и зачем создавать свой
Шорткоды — это удобный способ вставлять динамический контент в записи, страницы или виджеты без прямого изменения кода темы. Они выглядят как небольшие конструкции в квадратных скобках, например, [gallery]. WordPress обрабатывает их и заменяет на нужный вывод.
Создание собственного шорткода позволяет вывести данные из базы, выполнить вычисления или интегрироваться с внешними сервисами прямо внутри контента сайта. Это особенно полезно, если нужно часто повторять один и тот же функционал или выводить данные, зависящие от условий.
В этой статье на примере WPData мы разберем, как создать шорткод для вывода динамических данных, использовать параметры для гибкости и защитить код от ошибок и уязвимостей.
Регистрация шорткода: базовый пример
Чтобы создать свой шорткод, нужно зарегистрировать функцию, которая будет возвращать HTML или другую информацию, и связать ее с определенной строкой-шорткодом.
Пример функции и регистрации:
function wpdata_shortcode_show_date() {
return date('Y-m-d H:i:s');
}
add_shortcode('wpdata_date', 'wpdata_shortcode_show_date');После добавления этого кода в файл functions.php вашей темы или в плагин, вы сможете вставить в контент [wpdata_date], и на сайте отобразится текущая дата и время.
Это самый простой пример. Дальше рассмотрим более сложные и полезные сценарии.
Шорткод с параметрами: настройка вывода
Часто хочется управлять поведением шорткода через параметры. Например, вывести дату в нужном формате.
Расширяем функцию:
function wpdata_shortcode_show_date_atts($atts) {
$atts = shortcode_atts(
array('format' => 'Y-m-d'),
$atts,
'wpdata_date'
);
return date($atts['format']);
}
add_shortcode('wpdata_date', 'wpdata_shortcode_show_date_atts');Теперь можно использовать [wpdata_date format="d.m.Y H:i"], чтобы получить дату в формате день.месяц.год часы:минуты.
Такой подход делает шорткод гибким и удобным для пользователей.
Вывод данных из базы данных WordPress
Одна из типичных задач — получить и показать данные из таблиц WordPress, например, список последних записей или пользовательские данные.
Пример шорткода, выводящего 5 последних заголовков публикаций:
function wpdata_shortcode_latest_posts($atts) {
$atts = shortcode_atts(
array('count' => 5), $atts, 'wpdata_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>';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode('wpdata_latest_posts', 'wpdata_shortcode_latest_posts');Используйте [wpdata_latest_posts count="3"], чтобы вывести три последние записи. Это удобный способ встроить актуальный контент в любую часть сайта.
Обработка ошибок и безопасность шорткодов
При работе с данными всегда учитывайте безопасность и обработку ошибок. Например, при получении параметров проверяйте типы и значения, чтобы избежать SQL-инъекций и XSS.
В нашем примере параметры count мы привели к целочисленному типу через intval(). Это минимальная, но важная мера.
Если шорткод работает с пользовательским вводом или внешними источниками, обязательно используйте функции экранирования, такие как esc_html() и esc_url() при выводе в HTML.
А вот пример безопасного вывода названий постов с экранированием:
$output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';Создание комплексного шорткода с фильтрами и пагинацией
Если нужно вывести большие массивы данных, полезно добавить пагинацию и фильтры. Рассмотрим пример шорткода, который выводит посты с выбором категории и пагинацией.
Код шорткода:
function wpdata_shortcode_posts_with_filters($atts) {
global $wp_query;
$atts = shortcode_atts(array(
'category' => '',
'posts_per_page' => 5,
'paged' => 1
), $atts, 'wpdata_post_filters');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => intval($atts['posts_per_page']),
'category_name' => sanitize_text_field($atts['category']),
'paged' => $paged,
'post_status' => 'publish'
);
$query = new WP_Query($args);
if (!$query->have_posts()) {
return '<p>Нет записей по вашему запросу.</p>';
}
$output = '<ul>';
while ($query->have_posts()) {
$query->the_post();
$output .= '<li><a href="' . esc_url(get_permalink()) . '">' . esc_html(get_the_title()) . '</a></li>';
}
$output .= '</ul>';
// Пагинация
$big = 999999999; // уникальное число для замены
$pagination = paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, $paged),
'total' => $query->max_num_pages
));
if ($pagination) {
$output .= '<nav class="wpdata-pagination">' . $pagination . '</nav>';
}
wp_reset_postdata();
return $output;
}
add_shortcode('wpdata_post_filters', 'wpdata_shortcode_posts_with_filters');Для вывода используйте [wpdata_post_filters category="news" posts_per_page="3"]. Это позволит гибко управлять списком публикаций с пагинацией прямо из контента.
Популярные плагины для создания и управления шорткодами
Если хочется расширить возможности без программирования, рекомендуем несколько плагинов:
- Shortcodes Ultimate — содержит большой набор готовых шорткодов и удобный интерфейс для создания собственных.
- WP Shortcode by MyThemeShop — простой и легкий плагин с базовыми элементами.
- Custom Content Shortcode — для создания шорткодов с пользовательским контентом.
Они помогут быстро интегрировать нужный функционал, если нет времени на разработку.
Итог: почему стоит научиться создавать свои шорткоды
Создание собственных шорткодов — мощный инструмент для разработчика и администратора WordPress. Это позволяет:
- Встраивать сложную логику в простой контент
- Повысить гибкость и повторное использование кода
- Облегчить работу редакторов и контент-менеджеров
В WPData мы рекомендуем всегда создавать шорткоды с учетом безопасности и удобства, а также тестировать их на разных типах контента.