В работе с WordPress иногда возникает необходимость создавать динамические переадресации, которые меняются в зависимости от различных условий — например, по роли пользователя, по типу устройства, по параметрам URL и т.п. В этой статье мы рассмотрим, как реализовать такие переадресации с помощью собственного кода и популярных плагинов, а также разберём типичные сценарии и практические примеры.
Что такое динамическое переадресация и зачем она нужна
Переадресация (редирект) — это автоматическое перенаправление пользователя с одного URL на другой. Обычно редиректы статичны — один URL всегда ведёт на один другой. Динамическая переадресация меняет целевой URL в зависимости от условий, что позволяет гибко управлять поведением сайта.
Примеры использования динамических редиректов:
- Перенаправление пользователей с мобильных устройств на мобильную версию сайта.
- Перенаправление неавторизованных пользователей на страницу входа.
- Условное перенаправление по UTM-меткам для маркетинговых кампаний.
- Перенаправление по языку пользователя.
Для реализации таких задач нам понадобится программировать обработку запроса до вывода страницы.
Реализация динамической переадресации с помощью кода в functions.php
Самый простой способ — использовать хук template_redirect. Он срабатывает на этапе загрузки шаблона и подходит для проверки условий и отправки редиректа.
Пример 1. Перенаправление неавторизованных пользователей с приватной страницы
function wpcoding_redirect_non_logged_users() {
if ( is_page('privatnaya-stranica') && ! is_user_logged_in() ) {
wp_redirect( wp_login_url( get_permalink() ) );
exit;
}
}
add_action('template_redirect', 'wpcoding_redirect_non_logged_users');
Этот код проверяет, что пользователь пытается открыть страницу с слагом privatnaya-stranica, и если он неавторизован, перенаправляет его на страницу входа с возвратом обратно после логина.
Пример 2. Перенаправление мобильных пользователей на мобильную версию сайта
Для определения мобильных устройств можно использовать функцию wpcoding_is_mobile_device(). Пример:
function wpcoding_is_mobile_device() {
return wp_is_mobile();
}
function wpcoding_redirect_mobile_users() {
if ( wpcoding_is_mobile_device() && ! is_page('mobi-version') ) {
wp_redirect(home_url('/mobi-version/'));
exit;
}
}
add_action('template_redirect', 'wpcoding_redirect_mobile_users');
Здесь все мобильные посетители будут автоматически перенаправлены на страницу /mobi-version/, кроме тех, кто уже на ней находится.
Использование плагинов для управления динамическими редиректами
Если хочется сделать настройку редиректов через админку без правки кода, стоит обратить внимание на плагины с расширенными условиями.
Плагин Redirection
Один из самых популярных плагинов для управления редиректами. Позволяет создавать правила с условиями URL, заголовков, ролей пользователя и т.д. Например, можно задать правило, которое сработает, если URL содержит определённый параметр, и перенаправить на другой адрес.
Скачать: https://ru.wordpress.org/plugins/redirection/
Плагин Safe Redirect Manager
Простой и лёгкий плагин, поддерживающий создание редиректов с возможностью указания типа редиректа. Подходит для базовых сценариев с динамическими параметрами в URL.
Скачать: https://ru.wordpress.org/plugins/safe-redirect-manager/
Продвинутые варианты: редиректы на основе REST API или AJAX
Иногда необходимо делать переадресацию не сразу при загрузке страницы, а после получения данных от сервера или по результатам AJAX-запроса. В таких случаях можно использовать JavaScript и REST API.
Пример 3. Редирект после проверки состояния пользователя через AJAX
add_action('wp_enqueue_scripts', function() {
wp_enqueue_script('wpcoding-redirect', get_template_directory_uri() . '/js/redirect.js', ['jquery'], null, true);
wp_localize_script('wpcoding-redirect', 'wpcoding_ajax', [
'url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wpcoding_nonce')
]);
});
add_action('wp_ajax_nopriv_wpcoding_check_user', function() {
check_ajax_referer('wpcoding_nonce');
if ( ! is_user_logged_in() ) {
wp_send_json_success(['redirect' => wp_login_url()]);
} else {
wp_send_json_error();
}
});
Этот код загружает скрипт, который по AJAX проверяет, авторизован ли пользователь. Если нет — выполняется редирект на страницу входа.
Советы по безопасной и корректной реализации динамических переадресаций
При работе с редиректами важно:
- Всегда вызывать
exit;послеwp_redirect(), чтобы избежать выполнения лишнего кода. - Избегать циклических редиректов — проверяйте, что пользователь не перенаправляется на ту же страницу постоянно.
- Использовать правильные коды ответа HTTP (301 для постоянных, 302 для временных редиректов).
- Тестировать редиректы в разных браузерах и под разными пользователями.
- Если используете плагины, следите за их обновлениями и совместимостью с вашей версией WordPress.
Заключение
Динамические переадресации — мощный инструмент для улучшения пользовательского опыта и маркетингового таргетинга. С помощью кода и плагинов вы можете реализовать любые сценарии, от простых перенаправлений неавторизованных пользователей до сложных условий на основе параметров запроса и состояния сессии. Используйте примеры из статьи как шаблоны для своих проектов.