В WordPress часто возникает задача создавать страницы с динамическим контентом, который меняется в зависимости от параметров, введенных пользователем или других условий. В этой статье подробно рассмотрим, как с помощью собственных шорткодов создавать такие страницы, которые будут подстраиваться под запросы посетителей.
Что такое динамическая страница и зачем использовать шорткод
Динамическая страница — это страница, содержимое которой формируется на лету, а не хранится в статическом виде. Это позволяет показывать пользователям актуальную информацию, фильтровать данные, выводить результаты поиска, формы или другие интерактивные элементы.
Шорткод в WordPress — это удобный способ вставлять функционал в контент страниц или записей. Создавая собственный шорткод, вы можете написать PHP-код, который будет обрабатывать входящие параметры и выводить соответствующий результат.
Использование шорткодов для динамических страниц особенно полезно, когда вы хотите держать логику отображения внутри контента и не создавать отдельные шаблоны.
Создание собственного шорткода для вывода динамического контента
Рассмотрим пример создания шорткода, который выводит список последних записей определенной категории, передаваемой через параметр.
Добавьте следующий код в файл functions.php вашей темы или создайте небольшой плагин:
function wptool_dynamic_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
'posts_per_page' => 5
), $atts, 'wptool_posts'
);
if (empty($atts['category'])) {
return '<p>Параметр category не указан.</p>';
}
$query_args = array(
'category_name' => sanitize_text_field($atts['category']),
'posts_per_page' => intval($atts['posts_per_page'])
);
$query = new WP_Query($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>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
}
add_shortcode('wptool_posts', 'wptool_dynamic_posts_shortcode');Теперь в любой записи или на странице можно вставить шорткод [wptool_posts category="novosti" posts_per_page="3"], который выведет 3 последние записи из категории «novosti».
Разбор кода шорткода
Функция wptool_dynamic_posts_shortcode принимает параметры через $atts, задает значения по умолчанию и проверяет обязательный параметр category. Затем формируется запрос WP_Query по категории и количеству записей. В цикле выводится список ссылок на записи. В конце данные сбрасываются вызовом wp_reset_postdata() для корректной работы остальных частей страницы.
Добавление параметров URL для управления выводом динамической страницы
Чтобы сделать страницу еще более интерактивной, можно обрабатывать параметры из URL и передавать их в шорткод. Например, вы хотите, чтобы пользователь мог выбирать категорию через GET-параметр.
Изменим функцию так, чтобы она проверяла $_GET и переопределяла category:
function wptool_dynamic_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
'posts_per_page' => 5
), $atts, 'wptool_posts'
);
if (!empty($_GET['category'])) {
$atts['category'] = sanitize_text_field($_GET['category']);
}
if (empty($atts['category'])) {
return '<p>Параметр category не указан.</p>';
}
$query_args = array(
'category_name' => $atts['category'],
'posts_per_page' => intval($atts['posts_per_page'])
);
$query = new WP_Query($query_args);
if (!$query->have_posts()) {
return '<p>Записи не найдены.</p>';
}
$output = '<h3>Записи категории: ' . esc_html($atts['category']) . '</h3>';
$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;
}Теперь если открыть страницу с шорткодом [wptool_posts] и добавить в адресную строку ?category=blog, то выведутся записи категории blog.
Оптимизация и кеширование динамического контента
Динамические запросы могут замедлять загрузку страницы, особенно если данных много. Чтобы избежать этого, рекомендуем использовать кеширование результатов.
Один из простых способов — кешировать вывод шорткода с помощью Transients API:
function wptool_dynamic_posts_shortcode($atts) {
$atts = shortcode_atts(
array(
'category' => '',
'posts_per_page' => 5
), $atts, 'wptool_posts'
);
if (!empty($_GET['category'])) {
$atts['category'] = sanitize_text_field($_GET['category']);
}
if (empty($atts['category'])) {
return '<p>Параметр category не указан.</p>';
}
$cache_key = 'wptool_posts_' . md5(serialize($atts));
$output = get_transient($cache_key);
if ($output === false) {
$query_args = array(
'category_name' => $atts['category'],
'posts_per_page' => intval($atts['posts_per_page'])
);
$query = new WP_Query($query_args);
if (!$query->have_posts()) {
return '<p>Записи не найдены.</p>';
}
$output = '<h3>Записи категории: ' . esc_html($atts['category']) . '</h3>';
$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>';
set_transient($cache_key, $output, 3600); // кеш на 1 час
}
return $output;
}Таким образом, первый запрос сформирует и сохранит результат, а последующие в течение часа будут отдавать кеш, значительно ускоряя загрузку.
Примеры полезных плагинов для динамических страниц на WordPress
Для упрощения создания динамического контента можно использовать плагины:
- WPForms — позволяет создавать интерактивные формы с возможностью вывода результатов на страницах через шорткоды.
- Query Wrangler — визуальный конструктор запросов к записям с выводом через шорткоды.
- Clearfy Pro (https://wpshop.ru/clearfy-pro?utm_source=wptool.ru&utm_medium=article&utm_campaign=kak-sozdat-dinamicheskuyu-stranicu-v-wordpress-s-pomoshchyu-shortcode) — оптимизирует работу сайта и позволяет гибко управлять выводом контента.
Используйте эти инструменты для создания сложных динамических страниц без глубокого программирования.
Советы по безопасности при создании динамических страниц
При работе с динамическим контентом важно обезопасить сайт от XSS и других уязвимостей:
- Обязательно фильтруйте и экранируйте все входящие данные с помощью
sanitize_text_field(),esc_html()и подобных функций. - Не выводите необработанные данные напрямую.
- Используйте проверку nonce и права пользователя, если шорткод выполняет действия с изменением данных.
Это поможет избежать проблем с безопасностью и сохранить стабильность сайта.
Заключение
Создание динамических страниц через шорткод — мощный и гибкий способ расширить функциональность WordPress. С помощью передачи параметров, обработки GET-запросов и кеширования вы можете делать удобные и быстрые решения под задачи клиента или проекта. Рекомендуем экспериментировать с примерами из статьи, а при необходимости использовать проверенные плагины для упрощения работы.