Фильтр wp_redirect
в WordPress используется для изменения адреса перенаправления и HTTP-статуса, которые передаются в функцию wp_redirect()
. Этот инструмент полезен, когда нужно гибко настроить перенаправления в зависимости от условий на сайте, а также отладить их для корректной работы.
apply_filters( 'wp_redirect', string $location, int $status );
Фильтр wp_redirect
позволяет изменять URL-адрес, на который будет перенаправлен пользователь, и задавать HTTP-код ответа (например, 301 для постоянного или 302 для временного перенаправления). Фильтр можно применять для настройки перенаправлений на уровне шаблонов, плагинов или других участков кода, где вызывается функция wp_redirect()
.
Параметры
- $location (string): URL-адрес, на который будет перенаправлен пользователь.
- $status (int): Код HTTP-ответа для перенаправления (301, 302 и другие).
Пример 1: Изменение URL для всех перенаправлений
Для общего изменения URL-адреса перенаправления можно использовать следующий код, который перенаправляет всех пользователей на главную страницу сайта:
function custom_redirect_to_home( $location, $status ) {
return home_url();
}
add_filter( 'wp_redirect', 'custom_redirect_to_home', 10, 2 );
Здесь все перенаправления будут отправлять пользователя на главную страницу, независимо от исходного URL.
Пример 2: Перенаправление пользователей с определенной роли на другую страницу
Можно настроить перенаправление, чтобы пользователи с ролью «подписчик» перенаправлялись на страницу профиля при входе:
function redirect_subscriber_to_profile( $location, $status ) {
if ( is_user_logged_in() && current_user_can( 'subscriber' ) ) {
return site_url( '/profile' );
}
return $location;
}
add_filter( 'wp_redirect', 'redirect_subscriber_to_profile', 10, 2 );
Теперь подписчики будут перенаправляться на /profile
при попытке перейти на другие страницы.
Пример 3: Установка статуса перенаправления на постоянный (301)
При необходимости сделать перенаправление постоянным, можно изменить HTTP-статус на 301:
function custom_permanent_redirect( $location, $status ) {
$status = 301; // Устанавливаем статус 301 для постоянного перенаправления
return $location;
}
add_filter( 'wp_redirect', 'custom_permanent_redirect', 10, 2 );
Этот код делает все перенаправления постоянными, что полезно для SEO.
Пример 4: Отладка перенаправлений с помощью debug_backtrace()
Если требуется узнать, откуда вызывается перенаправление, можно использовать функцию debug_backtrace()
, чтобы отследить цепочку вызовов:
function debug_redirect_trace( $location ) {
error_log( print_r( debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ), true ) );
return $location;
}
add_filter( 'wp_redirect', 'debug_redirect_trace' );
Этот код записывает отладочную информацию в лог сервера, что полезно для отслеживания перенаправлений.
Советы по использованию
- Оптимизация кода: При необходимости задавать разные URL или статусы для разных случаев, используйте условия в функции фильтра.
- Отладка: Чтобы выяснить, где и почему выполняются перенаправления, включите запись отладочной информации в лог. Это полезно при работе с большими проектами или при использовании сторонних плагинов.
Заключение
Фильтр wp_redirect
позволяет гибко контролировать URL и статус кодов перенаправлений в WordPress, что удобно для настройки пользовательских маршрутов и улучшения навигации на сайте. Этот фильтр подходит для управления различными типами перенаправлений, от простых редиректов на главную страницу до сложных условий, таких как проверка роли пользователя или контекста.