Этот хук срабатывает после того, как 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');
Разбор кода:
is_user_logged_in()
: Проверяет, авторизован ли пользователь.is_page('restricted-page')
: Проверяет, пытается ли пользователь получить доступ к странице с определенным слагом (например, ‘restricted-page’).wp_redirect()
: Выполняет перенаправление на URL страницы входа. Параметрget_permalink()
передает текущий URL, чтобы после успешного входа пользователь мог вернуться на нужную страницу.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. Он идеально подходит для перенаправлений, управления заголовками, подключения специфичных ресурсов и других задач, связанных с поведением страницы. Использование этого хука позволяет сделать ваш сайт более динамичным и адаптивным к потребностям пользователей.