Как создать динамическую страницу в WordPress с помощью shortcode

В 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-запросов и кеширования вы можете делать удобные и быстрые решения под задачи клиента или проекта. Рекомендуем экспериментировать с примерами из статьи, а при необходимости использовать проверенные плагины для упрощения работы.

Автоматизация создания резервных копий WordPress с помощью PHP-кода
16.12.2025
Как отключить AJAX в WooCommerce для ускорения страницы корзины
12.05.2026
Как автоматизировать проверку и удаление спам-комментариев в WordPress
25.01.2026
Как автоматически удалять старые заказы WooCommerce по дате
25.05.2026
Как создать динамическое отображение товара WooCommerce по параметрам
09.01.2026