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() - решение есть!
Ниже показано как без труда вылавливать редиректы.
При включенном дебаге, используем код:
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' ) );