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): Вариант через замыкание: Вариант через функцию: Ознакомьтесь с возможностями функции debug_backtrace, чтобы изменить полноту предоставляемых данных. Также можно использовать функцию debug_print_backtrace(), но она сразу выводит данные на экран, поэтому их надо «буферить», чтобы передать в error_log(). Теперь попробуем, например, посетить страницу Благодаря этой отладочной информации, мы определили, что за перенаправление ответствен хук: Он навешивается в файле default-filters.php и запускает функцию wp_redirect_admin_locations(), которая и создает само перенаправление.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;
}
example.com/login/, с которой движок перенаправит нас на страницу example.com/wp-login.php. В логе мы получим следующую информацию:add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
Список изменений
| С версии 2.1.0 | Введена. |
Где вызывается хук
$location = apply_filters( 'wp_redirect', $location, $status );
Где используется хук в WordPress
add_filter( 'wp_redirect', array( $this, 'add_state_query_params' ) );