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' );