В работе с WordPress часто возникает задача настроить автоматические редиректы в зависимости от определённых условий. Это может понадобиться для улучшения юзабилити, SEO, или решения проблем с устаревшими URL. В этой статье мы рассмотрим, как реализовать условные редиректы с помощью кода и плагинов, а также разберём примеры использования.
Почему важны условные редиректы в WordPress
Редиректы – это инструмент, который помогает перенаправлять пользователей и поисковые системы с одного URL на другой. Автоматизация этого процесса позволяет:
- избежать ошибок 404 при изменении структуры сайта;
- перенаправлять пользователей с устаревших страниц на актуальные;
- управлять доступом, например, отправлять гостей на страницу входа;
- улучшать внутреннюю перелинковку для SEO.
Реализация условных редиректов вручную через .htaccess или серверные настройки часто неудобна и сложна для динамических условий, поэтому лучше использовать PHP и хуки WordPress.
Как реализовать условный редирект через functions.php (хук template_redirect)
Самый простой и гибкий способ — использовать хук template_redirect. Он вызывается до вывода контента и позволяет безопасно выполнить редирект.
Рассмотрим пример, когда мы хотим перенаправлять всех неавторизованных пользователей с определённой страницы на страницу входа.
function wp1_redirect_unauthenticated_users() {
if ( !is_user_logged_in() && is_page('member-area') ) {
wp_redirect( wp_login_url( get_permalink() ) );
exit;
}
}
add_action('template_redirect', 'wp1_redirect_unauthenticated_users');Объяснение:
is_user_logged_in()проверяет, авторизован ли пользователь;is_page('member-area')— проверяет, что мы на странице с ярлыкомmember-area;wp_redirect()делает редирект на страницу входа с передачей текущего URL для последующего возврата.
Редирект по пользовательским ролям
Допустим, нужно перенаправлять пользователей с ролью «подписчик» с главной страницы на кастомную страницу.
function wp1_redirect_subscribers() {
if ( is_front_page() && is_user_logged_in() ) {
$user = wp_get_current_user();
if ( in_array('subscriber', (array) $user->roles) ) {
wp_redirect( site_url('/special-offer') );
exit;
}
}
}
add_action('template_redirect', 'wp1_redirect_subscribers');Этот код проверяет роль текущего пользователя и если она «subscriber», то выполняет редирект.
Редиректы с использованием плагинов: удобные решения без кода
Если не хочется писать код, можно использовать плагины с условной логикой:
- Redirection — самый популярный плагин для управления редиректами. Позволяет создавать правила с условиями по URL, рефереру, ролям и т.д.
- Safe Redirect Manager — простой и надёжный плагин для редиректов с базовыми условиями.
- WP Conditional Redirects — плагин, специализирующийся на условных редиректах по ролям, устройствам, страницам.
Для примера создадим правило в Redirection для перенаправления всех посетителей с мобильных устройств на отдельную мобильную версию сайта. В интерфейсе добавим новое правило, выберем условие по User-Agent, указав шаблон для мобильных браузеров, и в качестве цели — URL мобильной версии.
Редиректы по сложным условиям: пример с проверкой времени суток и пользовательского мета
Иногда надо гибко настраивать логику. Например, перенаправлять пользователей на разные страницы в зависимости от времени суток и значения пользовательского мета-поля.
function wp1_conditional_time_based_redirect() {
if ( is_page('promo') && is_user_logged_in() ) {
$user_id = get_current_user_id();
$special_access = get_user_meta($user_id, 'special_access', true);
$hour = (int) date('H');
if ( $special_access === 'yes' ) {
// Редирект для пользователей с доступом
wp_redirect(site_url('/special-promo'));
exit;
} elseif ( $hour >= 9 && $hour < 18 ) {
// Рабочие часы — обычный промо
wp_redirect(site_url('/day-promo'));
exit;
} else {
// Вне рабочего времени — страница ожидания
wp_redirect(site_url('/wait-promo'));
exit;
}
}
}
add_action('template_redirect', 'wp1_conditional_time_based_redirect');Такой подход позволяет делать действительно умные редиректы, адаптированные под бизнес-логику.
Советы по отладке и безопасности редиректов
При работе с редиректами важно:
- всегда использовать
exit;послеwp_redirect()— чтобы избежать продолжения выполнения скрипта; - делать проверки на валидность URL, чтобы избежать открытых редиректов — это риск для безопасности;
- тестировать редиректы в разных сценариях и на разных ролях;
- следить за циклическими редиректами — они приводят к ошибкам загрузки.
Для проверки редиректов удобно использовать инструменты браузера (DevTools, вкладка Network) и специальные онлайн-сервисы.
Заключение
Автоматические условные редиректы в WordPress — мощный инструмент управления поведением пользователей и SEO-потоками. Используя хук template_redirect и базовые функции WordPress, можно быстро и гибко настраивать редиректы под любые задачи. При необходимости, плагины типа Redirection значительно упрощают работу без написания кода.