Динамические редиректы в WordPress по условиям

В этой статье разберём, как реализовать динамические редиректы в WordPress, используя различные условия, чтобы управлять поведением пользователей на сайте. Это полезно для SEO, маркетинга и улучшения пользовательского опыта. Мы рассмотрим примеры с готовыми плагинами и собственными функциями, которые можно добавить в файл functions.php вашей темы или создать отдельный плагин.

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

Статические редиректы с одной страницы на другую — привычное дело, но что если нужно перенаправлять пользователей в зависимости от их роли, устройства, источника трафика или других условий? Например:

  • Перенаправление мобильных пользователей на мобильную версию сайта;
  • Редирект для новых посетителей на страницу акции;
  • Перенаправление пользователей из определённой страны на локальный раздел;
  • Перенаправление после логина в зависимости от роли пользователя.

Все эти сценарии требуют динамического подхода, который мы и рассмотрим.

Использование плагина Redirection для динамических редиректов

Плагин Redirection — самый популярный и мощный инструмент для управления редиректами в WordPress. Он позволяет создавать правила с регулярными выражениями и условиями.

Например, чтобы сделать редирект для мобильных пользователей, можно использовать условие по User Agent в настройках плагина.

Но плагин ограничен в сложных логических условиях, таких как проверка роли пользователя или источника трафика сессии. Здесь на помощь приходит собственный код.

Реализация динамических редиректов через код в functions.php

Добавим функцию wpboot_dynamic_redirect, которая будет вызываться на хуке template_redirect и проверять условия для редиректа.

function wpboot_dynamic_redirect() {
    // Проверка, что это фронтенд
    if (is_admin()) {
        return;
    }

    // Пример 1: редирект для мобильных устройств
    if (wpboot_is_mobile()) {
        wp_redirect(home_url('/mobile-version'));
        exit;
    }

    // Пример 2: редирект по роли пользователя
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        if (in_array('subscriber', (array) $user->roles) && !is_page('subscriber-dashboard')) {
            wp_redirect(home_url('/subscriber-dashboard'));
            exit;
        }
    }

    // Пример 3: редирект по источнику перехода
    if (isset($_SERVER['HTTP_REFERER'])) {
        $referer = $_SERVER['HTTP_REFERER'];
        if (strpos($referer, 'google.com') !== false && !is_page('special-offer')) {
            wp_redirect(home_url('/special-offer'));
            exit;
        }
    }
}
add_action('template_redirect', 'wpboot_dynamic_redirect');

// Вспомогательная функция для определения мобильных устройств
function wpboot_is_mobile() {
    return wp_is_mobile();
}

В этом примере мы рассмотрели три варианта редиректов:

  • Для мобильных устройств с помощью встроенной функции wp_is_mobile();
  • Для пользователей с ролью subscriber — перенаправление на закрытую страницу;
  • Для посетителей, пришедших с Google, — на страницу специального предложения.

Этот код можно расширять, добавляя новые условия проверки, например, по IP, cookie, времени суток и другим параметрам.

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

При работе с редиректами важно соблюдать несколько правил:

  • Редиректы должны выполняться до вывода контента — поэтому используем хук template_redirect;
  • Обязательно вызывайте exit; после wp_redirect(), чтобы прервать дальнейшее выполнение скрипта;
  • Не создавайте циклические редиректы — проверяйте URL, на который делаете редирект;
  • Тестируйте каждый редирект отдельно, чтобы не потерять трафик и не ухудшить SEO.

Пример сложного редиректа с cookie и временем суток

Допустим, нужно показывать промо-страницу только новым посетителям в дневное время. Для этого поставим cookie при первом заходе и сделаем редирект только с 9:00 до 18:00.

function wpboot_redirect_new_visitors_daytime() {
    if (is_admin()) {
        return;
    }

    $promo_url = home_url('/promo');
    $current_url = home_url($_SERVER['REQUEST_URI']);

    // Проверяем время суток
    $hour = (int) current_time('H');
    if ($hour < 9 || $hour >= 18) {
        return;
    }

    // Проверяем cookie
    if (!isset($_COOKIE['wpboot_visited'])) {
        // Если не на промо странице, редиректим
        if ($current_url !== $promo_url) {
            setcookie('wpboot_visited', '1', time() + 86400 * 7, COOKIEPATH, COOKIE_DOMAIN);
            wp_redirect($promo_url);
            exit;
        }
    }
}
add_action('template_redirect', 'wpboot_redirect_new_visitors_daytime');

Этот пример покажет промо-страницу только один раз за неделю в дневное время. Такой подход полезен для маркетинговых кампаний, когда важно не надоедать постоянным посетителям.

Заключение: комбинируем плагины и код для гибких редиректов

Используйте плагин Redirection для простых правил с регулярными выражениями и дополните его кастомным кодом для сложных условий — по ролям, устройствам, времени и прочему.

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

Почему не работают купоны в WooCommerce и как это исправить
28.05.2026
Как использовать WooCommerce хуки для автоматизации изменений в корзине
26.06.2026
Автоматическое удаление старого контента в WordPress: пошаговое руководство
09.12.2025
Как отключить AJAX-загрузку в Gutenberg блоках WordPress
02.04.2026
Как удалить удалённых пользователей WordPress без возможности восстановления
22.12.2025