Позволяет изменить адрес перенаправления (редиректа), который передается в функцию (указывается для функции) wp_redirect().
Использование
add_filter( 'wp_redirect', 'filter_function_name_1804', 10, 2 ); function filter_function_name_1804( $location, $status ){ // filter... return $location; }
- $location(строка)
- Путь или URL для перенаправления.
- $status(число)
- Статус код перенаправления (код состояния HTTP).
Примеры
#1 Как отследить, где происходит перенаправление
Порой отследить, какой участок кода создаёт перенаправления в 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
. В логе мы получим следующую информацию:
Array ( [0] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\class-wp-hook.php [line] => 289 [function] => wp_redirect_print_debug_backtrace [args] => Array ( [0] => https://wp-test.ru/wp-login.php ) ) [1] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\plugin.php [line] => 206 [function] => apply_filters [class] => WP_Hook [type] => -> [args] => Array ( [0] => https://wp-test.ru/wp-login.php [1] => Array ( [0] => https://wp-test.ru/wp-login.php [1] => 302 ) ) ) [2] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\pluggable.php [line] => 1257 [function] => apply_filters [args] => Array ( [0] => wp_redirect [1] => https://wp-test.ru/wp-login.php [2] => 302 ) ) [3] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\canonical.php [line] => 971 [function] => wp_redirect [args] => Array ( [0] => https://wp-test.ru/wp-login.php ) ) [4] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\class-wp-hook.php [line] => 287 [function] => wp_redirect_admin_locations [args] => Array ( [0] => ) ) [5] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\class-wp-hook.php [line] => 311 [function] => apply_filters [class] => WP_Hook [type] => -> [args] => Array ( [0] => [1] => Array ( [0] => ) ) ) [6] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\plugin.php [line] => 478 [function] => do_action [class] => WP_Hook [type] => -> [args] => Array ( [0] => Array ( [0] => ) ) ) [7] => Array ( [file] => F:\server\www\wp-test.ru\wp-includes\template-loader.php [line] => 13 [function] => do_action [args] => Array ( [0] => template_redirect ) ) [8] => Array ( [file] => F:\server\www\wp-test.ru\wp-blog-header.php [line] => 19 [args] => Array ( [0] => F:\server\www\wp-test.ru\wp-includes\template-loader.php ) [function] => require_once ) [9] => Array ( [file] => F:\server\www\wp-test.ru\index.php [line] => 17 [args] => Array ( [0] => F:\server\www\wp-test.ru\wp-blog-header.php ) [function] => require ) )
Благодаря этой отладочной информации, мы определили, что за перенаправление ответствен хук:
add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
Он навешивается в файле default-filters.php и запускает функцию wp_redirect_admin_locations(), которая и создает само перенаправление.