template_redirect хук-подіяWP 1.5.0

Спрацьовує перед тим, як WordPress визначить, який файл шаблону використовувати для виведення контенту.

Подія зручно використовувати для перенаправлення, коли WordPress обробив основний запит і встановив усі об’єкти ($wp_query, $post, умовні теги ), але виведення контенту на екран ще не відбулося.

Це популярний хук і найзручніше місце, коли для ухвалення рішення про перенаправлення потрібні всі дані про поточний запит (об’єкт WordPress, що обробляється).

Нотатка з неправильного використання хука

Цей хук не можна використовувати для завантаження альтернативного файлу шаблону. Приклад неправильного коду:

// неправильний код, використовуйте template_include хук
add_action( 'template_redirect', 'my_callback' );
function my_callback() {
	if ( /* Умова */ ) {
		include( SOME_PATH . '/some-custom-file.php');
		exit();
	}
}

Проблема цього коду в тому, що під час спрацювання умови та після підключення зазначеного файлу робота WordPress повністю припиняється. І перед припиненням роботи, не спрацьовують деякі важливі фільтри та функції, які використовуються плагінами у WordPress. Це найчастіше спричиняє неприємні наслідки. Які не завжди помітні одразу.

Щоб підключити альтернативний файл шаблону, потрібно використовувати фільтр template_include :

add_filter('template_include', 'my_callback');
function my_callback( $original_template ) {
	if ( /* Умова */ )
		return SOME_PATH . '/some-custom-file.php';
	else
		return $original_template;
}

Ефект буде той самий і ніяких проблем з плагінами та іншим.

Коротко це правило можна записати так:

  • template_redirect – для перенаправлень
  • template_include – для підключень

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

add_action( 'template_redirect', 'wp_kama_template_redirect_action' );

/**
 * Function for `template_redirect` action-hook.
 *
 * @return void
 */
function wp_kama_template_redirect_action(){

	// action...
}

Приклади

0

#1 Перенаправлення на сторінку реєстрації

Припустимо, у нас є сторінка service, вхід на яку потрібно відкрити лише авторизованим користувачам, а решту потрібно перекинути на сторінку авторизації.

Наступний код показує як це зробити:

function my_page_template_redirect(){
	if( is_page('service') && ! is_user_logged_in() ){
		wp_redirect( home_url( '/signup/' ) );
		exit();
	}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
0

#2 Ще приклади

Дивіться у статті: Перенаправлення на випадковий запис WordPress .

список змін

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

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

wp-includes/template-loader.php 13

do_action('template_redirect');

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

wp-includes/default-filters.php 312

add_action( 'template_redirect', 'rest_output_link_header', 11, 0);

wp-includes/default-filters.php 343

add_action( 'template_redirect', 'wp_shortlink_header', 11, 0);

wp-includes/default-filters.php 444

add_action( 'template_redirect', 'wp_old_slug_redirect');

wp-includes/default-filters.php 599

add_action('template_redirect', 'redirect_canonical');

wp-includes/default-filters.php 600

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

wp-includes/default-filters.php 621

add_action( 'template_redirect', '_wp_admin_bar_init', 0);

wp-includes/ms-default-filters.php 74

add_action( 'template_redirect', 'maybe_redirect_404' );

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

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