wp_redirect хук-фильтр . WP 2.1.0

Click here to view original web page at wp-kama.ru

Позволяет изменить адрес перенаправления (редиректа), который передается в функцию (указывается для функции) 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(), которая и создает само перенаправление.

Список изменений

Где вызывается хук

Где используется хук в ядре WP