template_redirect
Спрацьовує перед тим, як 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...
}
Приклади
#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' );
#2 Ще приклади
Дивіться у статті: Перенаправлення на випадковий запис WordPress .
список змін
З версії 1.5.0 | Введено. |
Де викликається хук
/wp-includes/template-loader.php
do_action('template_redirect');
Де використовується хук у WordPress
add_action( 'template_redirect', 'rest_output_link_header', 11, 0);
add_action( 'template_redirect', 'wp_shortlink_header', 11, 0);
add_action( 'template_redirect', 'wp_old_slug_redirect');
add_action('template_redirect', 'redirect_canonical');
add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', '_wp_admin_bar_init', 0);
add_action( 'template_redirect', 'maybe_redirect_404' );