Как создать динамические страницы в WordPress без плагинов

Часто в проектах на WordPress возникает задача создавать динамические страницы, которые генерируются на лету, без необходимости создавать их вручную в админке. Это может быть полезно, если у вас есть набор данных, например, продукты, сотрудники или статьи, и вы хотите выводить их на собственных страницах с уникальным URL и оформлением.

Что такое динамические страницы в WordPress и зачем они нужны

Динамические страницы — это страницы, контент которых формируется программно в зависимости от параметров запроса. В отличие от статических страниц, которые создаются через админку и хранятся в базе, динамические генерируются на основе данных, которые могут храниться в базе, файлах или внешних источниках.

Примеры применения:

  • Профили пользователей с уникальными URL;
  • Каталоги товаров или услуг;
  • Страницы с отчетами или статистикой;
  • Персонализированные предложения или акции.

Для создания таких страниц обычно используют плагины, но можно сделать это и без них, создав собственный обработчик маршрутов и шаблон вывода.

Свой маршрут и обработчик URL: использование хука template_redirect

Первый шаг — поймать URL запроса и проверить, соответствует ли он нужному динамическому паттерну. Для этого используем хук template_redirect, который срабатывает перед загрузкой шаблона.

Пример кода для WordPress с префиксом функций wpsystem_:

function wpsystem_dynamic_page_handler() {
    if (isset($_GET['profile_id'])) {
        $profile_id = intval($_GET['profile_id']);
        if ($profile_id > 0) {
            // Подключаем свой шаблон и передаем данные
            include get_template_directory() . '/dynamic-profile-template.php';
            exit;
        }
    }
}
add_action('template_redirect', 'wpsystem_dynamic_page_handler');

В данном примере мы ловим параметр profile_id в URL, например, https://site.ru/?profile_id=123, и подключаем кастомный шаблон, где уже строим страницу профиля.

Как сделать красивые URL без параметров

Чтобы URL выглядели как /profile/123/, нужно добавить rewrite правило. Это делается через хук init и функцию add_rewrite_rule:

function wpsystem_add_rewrite_rules() {
    add_rewrite_rule('^profile/([0-9]+)/?$', 'index.php?profile_id=$matches[1]', 'top');
}
add_action('init', 'wpsystem_add_rewrite_rules');

После добавления правила нужно обновить правила пермалинков, зайдя в админку в «Настройки» → «Постоянные ссылки» и просто сохранив их.

Создаем шаблон вывода динамической страницы

В файле dynamic-profile-template.php можно написать код, который загрузит данные по ID и выведет их красиво.

<?php
// Получаем ID из параметра
$profile_id = intval($_GET['profile_id'] ?? 0);

// Пример запроса к базе или API для получения данных
$profile_data = wpsystem_get_profile_data($profile_id);

if (!$profile_data) {
    status_header(404);
    echo '<h1>Профиль не найден</h1>';
    exit;
}

get_header();
?>

<div class="profile-container">
    <h1><?php echo esc_html($profile_data['name']); ?></h1>
    <p>Email: <?php echo esc_html($profile_data['email']); ?></p>
    <p>Описание: <?php echo nl2br(esc_html($profile_data['description'])); ?></p>
</div>

<?php get_footer(); ?>

Функция wpsystem_get_profile_data — пример вашей функции для получения данных из базы или API.

Пример функции получения данных из кастомной таблицы

function wpsystem_get_profile_data($id) {
    global $wpdb;
    $table = $wpdb->prefix . 'profiles';
    return $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE id = %d", $id), ARRAY_A);
}

Добавление SEO и метаданных для динамических страниц

Поскольку страницы генерируются динамически, важно корректно задать метатеги для SEO. Для этого можно использовать хуки wp_head и wp_title, проверяя наличие параметра profile_id.

function wpsystem_dynamic_seo_meta() {
    if (isset($_GET['profile_id'])) {
        $profile_id = intval($_GET['profile_id']);
        $profile = wpsystem_get_profile_data($profile_id);
        if ($profile) {
            echo '<title>' . esc_html($profile['name']) . ' - Профиль пользователя</title>';
            echo '<meta name="description" content="Профиль ' . esc_attr($profile['name']) . ' на сайте.">';
        }
    }
}
add_action('wp_head', 'wpsystem_dynamic_seo_meta');

Поддержка пагинации и фильтров на динамических страницах

Если нужно показывать списки с пагинацией (например, список статей пользователя), можно расширить обработчик, учитывая параметры страницы и фильтры.

Пример чтения параметра paged и вывода пагинации:

$paged = max(1, intval($_GET['paged'] ?? 1));
$per_page = 10;
$offset = ($paged - 1) * $per_page;

// Запрос с LIMIT и OFFSET
$items = wpsystem_get_profile_items($profile_id, $per_page, $offset);
$total = wpsystem_get_profile_items_count($profile_id);

// Вывод пагинации
$total_pages = ceil($total / $per_page);

for ($i = 1; $i <= $total_pages; $i++) {
    echo '<a href="?profile_id=' . $profile_id . '&paged=' . $i . '">' . $i . '</a> ';
}

Резюме: преимущества собственного динамического маршрута

Создание динамических страниц без плагинов даёт полный контроль над URL, загрузкой данных и выводом. Вы не зависите от сторонних решений, что уменьшает нагрузку и повышает безопасность. Это особенно актуально для специализированных проектов с уникальными требованиями.

Если же нужно быстро получить готовый функционал, можно посмотреть решения на WPGPT или Clearfy Pro, которые помогают оптимизировать маршрутизацию и кеширование.

Добавление дополнительного поля в форму регистрации WordPress
22.03.2026
WooCommerce: как добавить политику конфиденциальности на страницу оформления заказа
29.05.2026
Как добавить автоматический режим работы для плагина WordPress
25.01.2026
Как создать динамический фильтр по таксономиям в WordPress с примером кода
09.02.2026
Как добавить автоматическое сохранение в редактор Gutenberg в WordPress
10.11.2025