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