Во многих проектах на WordPress возникает необходимость вывести динамические данные в контенте страниц или записей. Для этого отлично подходят шорткоды, которые позволяют внедрять произвольный PHP-код туда, где стандартные возможности редактора ограничены.
Основы создания шорткода для динамического контента
Шорткод — это простой способ добавить в текстовую часть сайта произвольный функционал. В WordPress для создания шорткода используется функция add_shortcode(), которой передаётся уникальное имя и функция-обработчик, возвращающая HTML.
Главное — сделать шорткод максимально универсальным и безопасным, чтобы он мог принимать атрибуты и корректно обрабатывать данные.
Пример базового шорткода, который выводит текущее время:
function wpinc_current_time_shortcode($atts) {
$atts = shortcode_atts(array(
'format' => 'H:i:s',
), $atts, 'wpinc_current_time');
return date($atts['format']);
}
add_shortcode('wpinc_current_time', 'wpinc_current_time_shortcode');
Вызов [wpinc_current_time format="d.m.Y H:i"] выведет время в указанном формате.
Динамический вывод данных из базы WordPress с фильтрацией
Задача: создать шорткод, который выводит список последних записей из определённой категории с возможностью указать количество и сортировку.
Это удобно, например, для вставки подборок новостей или статей без редактирования шаблонов.
Пример реализации:
function wpinc_recent_posts_shortcode($atts) {
$atts = shortcode_atts(array(
'category' => '',
'posts_per_page' => 5,
'order' => 'DESC',
), $atts, 'wpinc_recent_posts');
$args = array(
'posts_per_page' => intval($atts['posts_per_page']),
'order' => $atts['order'],
'post_status' => 'publish',
);
if ($atts['category']) {
$args['category_name'] = sanitize_text_field($atts['category']);
}
$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="'.get_permalink().'">'.get_the_title().'</a></li>';
}
$output .= '</ul>';
wp_reset_postdata();
return $output;
}
add_shortcode('wpinc_recent_posts', 'wpinc_recent_posts_shortcode');
Использование: [wpinc_recent_posts category="novosti" posts_per_page="3" order="ASC"]
Автоматизация вывода данных из пользовательских таблиц и плагинов
Иногда нужно вывести данные, которые не хранятся в стандартных таблицах WordPress, например, из плагина или кастомной таблицы. Для этого в шорткоде используют прямые запросы через $wpdb.
Пример — вывод списка отзывов из кастомной таблицы wpinc_reviews:
function wpinc_reviews_shortcode($atts) {
global $wpdb;
$atts = shortcode_atts(array(
'limit' => 5,
), $atts, 'wpinc_reviews');
$limit = intval($atts['limit']);
$table = $wpdb->prefix . 'reviews';
$results = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table ORDER BY created_at DESC LIMIT %d", $limit), ARRAY_A);
if (empty($results)) {
return '<p>Отзывы отсутствуют.</p>';
}
$output = '<div class="wpinc-reviews">';
foreach ($results as $review) {
$output .= '<blockquote><p>' . esc_html($review['text']) . '</p><footer>' . esc_html($review['author']) . '</footer></blockquote>';
}
$output .= '</div>';
return $output;
}
add_shortcode('wpinc_reviews', 'wpinc_reviews_shortcode');
Такой подход позволяет интегрировать данные из любых источников в удобном формате.
Использование плагина Clearfy Pro для расширения возможностей шорткодов
Плагин Clearfy Pro содержит модуль для управления шорткодами и оптимизации сайта. Он позволяет создавать шорткоды с визуальным редактором и расширенными параметрами, что упрощает разработку.
Например, с Clearfy Pro можно задать условия показа шорткода по ролям пользователей, устройствам или страницам без дополнительного кода.
Для подключения кастомного шорткода в Clearfy Pro можно использовать стандартную функцию add_shortcode, а затем управлять его выводом через настройки плагина.
Советы по безопасности и производительности при использовании шорткодов
При создании шорткодов важно следить за безопасностью — обязательно экранируйте вывод с помощью функций esc_html, esc_attr и подобных, чтобы избежать XSS-уязвимостей.
Также не рекомендуется выполнять тяжелые запросы или сложные вычисления в шорткодах, так как они влияют на скорость загрузки страниц. Если данные обновляются нечасто, лучше использовать кеширование с помощью Transients API.
Пример добавления кеша в шорткод:
function wpinc_cached_shortcode($atts) {
$cache_key = 'wpinc_cached_shortcode_output';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
// Генерация контента
$output = '<p>Динамический контент с кешированием</p>';
set_transient($cache_key, $output, 3600); // Кеш на 1 час
return $output;
}
add_shortcode('wpinc_cached', 'wpinc_cached_shortcode');
Заключение: применение динамических шорткодов в реальных проектах
Шорткоды с динамическим выводом — мощный инструмент для расширения функционала сайта без изменения шаблонов. Они позволяют быстро внедрять новые блоки с контентом, формировать подборки или интегрировать сторонние данные.
Используйте проверенные методы разработки, обязательно тестируйте на безопасность и производительность, а при необходимости применяйте плагины, как Clearfy Pro, для упрощения работы и расширения возможностей.
Такой подход поможет сделать ваш WordPress-сайт более гибким и удобным для управления контентом.