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

Дозволяє змінити адресу перенаправлення (редиректу), яка передається у функцію (вказується для функції) wp_redirect() .

Використання

add_filter( 'wp_redirect', 'wp_kama_redirect_filter', 10, 2);

/**
 * Function for `wp_redirect` filter-hook.
 *
 * @param string $location Оцінка або URL-адреса до реdirect to.
 * @param int $status HTTP response status code to use.
 *
 * @return string
 */
function wp_kama_redirect_filter( $location, $status ){

	// Filter...
	return $location;
}
$location
(рядок)
Шлях або URL для перенаправлення.
$status
(число)
Статус код перенаправлення (
код стану HTTP ).

Приклади

0

#1 Як відстежити, де відбувається перенаправлення

Іноді при дебаге складно відстежити (відловити, знайти) який ділянку коду створює перенаправлення WordPress (складно зловити редирект). Але якщо такі редиректи робляться функціями WordPress: 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:serverwwwwp-test.ruwp-includesclass-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:serverwwwwp-test.ruwp-includesplugin.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:serverwwwwp-test.ruwp-includespluggable.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:serverwwwwp-test.ruwp-includescanonical.php
			[line] => 971
			[function] => wp_redirect
			[args] => Array
				(
					[0] => https://wp-test.ru/wp-login.php
				)

		)

	[4] => Array
		(
			[file] => F:serverwwwwp-test.ruwp-includesclass-wp-hook.php
			[line] => 287
			[function] => wp_redirect_admin_locations
			[args] => Array
				(
					[0] =>
				)

		)

	[5] => Array
		(
			[file] => F:serverwwwwp-test.ruwp-includesclass-wp-hook.php
			[line] => 311
			[function] => apply_filters
			[class] => WP_Hook
			[type] => ->
			[args] => Array
				(
					[0] =>
					[1] => Array
						(
							[0] =>
						)

				)

		)

	[6] => Array
		(
			[file] => F:serverwwwwp-test.ruwp-includesplugin.php
			[line] => 478
			[function] => do_action
			[class] => WP_Hook
			[type] => ->
			[args] => Array
				(
					[0] => Array
						(
							[0] =>
						)

				)

		)

	[7] => Array
		(
			[file] => F:serverwwwwp-test.ruwp-includestemplate-loader.php
			[line] => 13
			[function] => do_action
			[args] => Array
				(
					[0] => template_redirect
				)

		)

	[8] => Array
		(
			[file] => F:serverwwwwp-test.ruwp-blog-header.php
			[line] => 19
			[args] => Array
				(
					[0] => F:serverwwwwp-test.ruwp-includestemplate-loader.php
				)

			[function] => require_once
		)

	[9] => Array
		(
			[file] => F:serverwwwwp-test.ruindex.php
			[line] => 17
			[args] => Array
				(
					[0] => F:serverwwwwp-test.ruwp-blog-header.php
				)

			[function] => require
		)

)

Завдяки цій налагоджувальній інформації, ми визначили, що за перенаправлення відповідальний хук:

add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000);

Він навішується у файлі wp_redirect_admin_locations() , яка створює саме перенаправлення.

список змін

З версії 2.1.0Введено.

Де викликається хук

wp-includes/pluggable.php 1382

$location = apply_filters( 'wp_redirect', $location, $status );

Де використовується хук у WordPress

wp-includes/class-wp-customize-manager.php 1928

add_filter( 'wp_redirect', array( $this, 'add_state_query_params' ) );

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *