wp_redirect
Позволяет изменить адрес перенаправления (редиректа), который передается в функцию (указывается для функции) wp_redirect().
Использование
add_filter( 'wp_redirect', 'wp_kama_redirect_filter', 10, 2 );
/**
* Function for `wp_redirect` filter-hook.
*
* @param string $location The path or URL to redirect to.
* @param int $status The HTTP response status code to use.
*
* @return string
*/
function wp_kama_redirect_filter( $location, $status ){
// filter...
return $location;
}
- $location(строка)
- Путь или URL для перенаправления.
- $status(число)
- Код статуса перенаправления (код состояния HTTP).
Примеры
#1 Как отследить, где происходит перенаправление
Порой при дебаге сложно отследить (отловить, найти) какой участок кода создаёт перенаправления в WordPress (сложно поймать редирект). Но если такие редиректы делаются функциями WordPress: wp_redirect() или wp_safe_redirect() - решение есть!
Ниже показано как без труда вылавливать редиректы.
При включенном дебаге, используем код (желательно гдето пораньше например в mu-plugins):
Вариант через замыкание:
add_filter( 'wp_redirect', function( $location ) {
//error_log( print_r( debug_backtrace( 1 ), true ) );
//error_log( print_r( debug_backtrace( 0 ), true ) );
error_log( print_r( debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ), true ) );
return $location;
} );
Вариант через функцию:
add_filter( 'wp_redirect', 'wp_redirect_print_debug_backtrace' );
function wp_redirect_print_debug_backtrace( $location ) {
error_log( print_r( debug_backtrace( true ), true ) );
// или
/*
ob_start();
debug_print_backtrace();
$log = ob_get_clean();
error_log( $log );
*/
return $location;
}
Ознакомьтесь с возможностями функции debug_backtrace, чтобы изменить полноту предоставляемых данных.
Также можно использовать функцию debug_print_backtrace(), но она сразу выводит данные на экран, поэтому их надо «буферить», чтобы передать в error_log().
Теперь попробуем, например, посетить страницу example.com/login/, с которой движок перенаправит нас на страницу example.com/wp-login.php. В логе мы получим следующую информацию:
Благодаря этой отладочной информации, мы определили, что за перенаправление ответствен хук:
add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
Он навешивается в файле default-filters.php и запускает функцию wp_redirect_admin_locations(), которая и создает само перенаправление.
Список изменений
| С версии 2.1.0 | Введена. |
Где вызывается хук
$location = apply_filters( 'wp_redirect', $location, $status );
Где используется хук в WordPress
add_filter( 'wp_redirect', array( $this, 'add_state_query_params' ) );