Хук template_redirect в WordPress используется для выполнения действий перед тем, как будет загружен шаблон страницы

Этот хук срабатывает после того, как WordPress определит, какой шаблон использовать, но до того, как этот шаблон будет загружен и отображен. Это идеальное место для перенаправлений, изменения заголовков или выполнения любых других действий, которые должны происходить перед выводом содержимого страницы.

Когда использовать template_redirect?

  • Для выполнения перенаправлений (например, если пользователь пытается получить доступ к устаревшей странице).
  • Для изменения заголовков HTTP, таких как код состояния (например, 404).
  • Для внедрения кода перед загрузкой основного контента (например, добавление специфичных стилей или скриптов).
  • Для работы с кастомными запросами и модификациями.

Пример использования template_redirect

Предположим, вы хотите перенаправить пользователей на страницу входа, если они пытаются получить доступ к определенной странице вашего сайта без авторизации. Вот как это можно сделать:

function redirect_to_login() {
    // Проверяем, если пользователь не авторизован и пытается получить доступ к странице 'restricted-page'
    if (!is_user_logged_in() && is_page('restricted-page')) {
        wp_redirect(wp_login_url(get_permalink()));
        exit; // Не забываем выйти, чтобы остановить дальнейшую обработку
    }
}
add_action('template_redirect', 'redirect_to_login');

Разбор кода:

  1. is_user_logged_in(): Проверяет, авторизован ли пользователь.
  2. is_page('restricted-page'): Проверяет, пытается ли пользователь получить доступ к странице с определенным слагом (например, ‘restricted-page’).
  3. wp_redirect(): Выполняет перенаправление на URL страницы входа. Параметр get_permalink() передает текущий URL, чтобы после успешного входа пользователь мог вернуться на нужную страницу.
  4. exit: Необходимо завершить выполнение скрипта после перенаправления, чтобы предотвратить дальнейшую обработку.

Изменение заголовка HTTP

Вы также можете использовать template_redirect для изменения заголовков, например, для установки специального заголовка или кода состояния:

function custom_header_status() {
    if (is_page('custom-page')) {
        // Устанавливаем заголовок 403 для страницы 'custom-page'
        wp_die('Доступ запрещен', 'Ошибка 403', array('response' => 403));
    }
}
add_action('template_redirect', 'custom_header_status');

Применение настраиваемых стилей и скриптов

С помощью template_redirect можно подключать стили и скрипты для определенных страниц:

function load_custom_styles() {
    if (is_page('contact')) {
        wp_enqueue_style('custom-contact-style', get_template_directory_uri() . '/css/contact.css');
    }
}
add_action('template_redirect', 'load_custom_styles');

Условия применения

  • Гибкость: template_redirect позволяет вам легко модифицировать поведение вашего сайта на уровне шаблонов, не внося изменения в сами шаблоны.
  • Безопасность: Используйте exit после wp_redirect для предотвращения дальнейшей обработки, что помогает избежать неожиданных ошибок и проблем.

Заключение

Хук template_redirect является мощным инструментом для выполнения действий перед загрузкой шаблона в WordPress. Он идеально подходит для перенаправлений, управления заголовками, подключения специфичных ресурсов и других задач, связанных с поведением страницы. Использование этого хука позволяет сделать ваш сайт более динамичным и адаптивным к потребностям пользователей.

Почитаем еще?: