Автоматические редиректы в WordPress — важный инструмент для управления трафиком сайта, улучшения SEO и повышения удобства пользователей. В этой статье рассмотрим, как реализовать условные редиректы с помощью кода и плагинов, а также разберемся с типичными кейсами, когда они нужны.
Зачем нужны условные редиректы в WordPress
Редиректы позволяют перенаправлять посетителей с одной страницы на другую. Примеры ситуаций:
- Перенос контента на новый URL после изменения структуры сайта.
- Редирект пользователей в зависимости от их роли или авторизации.
- Перенаправление на мобильную версию сайта.
- Редиректы по геолокации для региональных сайтов.
- Защита устаревших страниц с ошибкой 404, направляя на релевантные разделы.
Безусловные редиректы просты, но условия дают большую гибкость и позволяют делать перенаправления более точными и полезными.
Как создать условный редирект через functions.php
Самый легкий способ — добавить код в файл functions.php активной темы или лучше — в кастомный плагин, чтобы не потерять изменения при обновлении темы.
Пример: перенаправить всех неавторизованных пользователей с /private-page/ на страницу входа.
function wpstuff_redirect_non_logged_users() {
if ( !is_user_logged_in() && is_page('private-page') ) {
wp_redirect(wp_login_url());
exit;
}
}
add_action('template_redirect', 'wpstuff_redirect_non_logged_users');Здесь мы используем хук template_redirect, который срабатывает до загрузки шаблона страницы, и функцию wp_redirect() для перенаправления.
Редирект по роли пользователя
Иногда нужно отправлять пользователей с определенной ролью на специальные страницы. Например, если пользователь с ролью «подписчик» зашел на страницу /premium-content/, перенаправить на страницу подписки.
function wpstuff_redirect_by_user_role() {
if ( is_page('premium-content') && is_user_logged_in() ) {
$user = wp_get_current_user();
if ( in_array('subscriber', (array) $user->roles) ) {
wp_redirect(home_url('/subscribe/'));
exit;
}
}
}
add_action('template_redirect', 'wpstuff_redirect_by_user_role');Редиректы с использованием плагинов
Если вы не хотите писать код, можно использовать плагины с поддержкой условий:
- Redirection — популярный бесплатный плагин для управления редиректами с возможностью настроить условия по URL, статусу, рефереру и т.д.
- Clearfy Pro — содержит расширенные функции оптимизации и управления редиректами, позволяет исключать дублирование и настраивать сложные сценарии.
Например, в Redirection можно создать правило с условием, что редирект срабатывает только если посетитель пришел с определенного домена или с конкретным user agent (браузером).
Редирект по геолокации с помощью кода и плагинов
Редирект по геолокации полезен для сайтов, ориентированных на несколько стран. Для этого можно использовать сервисы IP-геолокации и написать код с проверкой IP.
Пример с использованием GeoIP2 и PHP:
function wpstuff_geo_redirect() {
if ( !is_admin() && !is_user_logged_in() ) {
require_once '/path/to/geoip2.phar';
use GeoIp2\Database\Reader;
try {
$reader = new Reader('/path/to/GeoLite2-Country.mmdb');
$record = $reader->country($_SERVER['REMOTE_ADDR']);
if ($record->country->isoCode === 'RU' && !is_page('ru-version')) {
wp_redirect(home_url('/ru-version/'));
exit;
}
} catch (Exception $e) {
// Логируем ошибку или игнорируем
}
}
}
add_action('template_redirect', 'wpstuff_geo_redirect');Альтернативно можно использовать плагин OmniVideo, который поддерживает геолокационные функции и может быть расширен для редиректов.
Ошибки и нюансы при работе с редиректами в WordPress
При настройке условных редиректов важно помнить:
- Всегда вызывайте
exit;послеwp_redirect();, чтобы остановить выполнение скрипта. - Не вызывайте редиректы в хуках, где уже отправлялись заголовки.
- Проверяйте, чтобы не создавать циклы редиректов — они разрушают SEO и пользовательский опыт.
- Тестируйте редиректы в разных сценариях, особенно при использовании куки и сессий.
Если вы хотите централизованно управлять редиректами, советую использовать плагин Redirection с расширенными логами и условными правилами.
Пример функции для массового условного редиректа по метке в URL
Иногда нужно автоматически перенаправлять все URL с определенным параметром:
function wpstuff_redirect_by_query_var() {
if ( isset($_GET['promo']) && $_GET['promo'] === 'special' ) {
wp_redirect(home_url('/special-offer/'));
exit;
}
}
add_action('template_redirect', 'wpstuff_redirect_by_query_var');Это удобно для акций и маркетинговых кампаний, чтобы направлять пользователей на целевые страницы.
Выводы и рекомендации
Условные редиректы — мощный инструмент для построения гибкой логики сайта на WordPress. Используйте встроенные хуки и функции для легких задач или подключайте плагины для сложных сценариев. Обязательно тестируйте все варианты, чтобы избежать ошибок и ухудшения SEO.