Верх страницы
Обложка к записи Не используйте template_redirect для загрузки своих шаблонов
Время для прочтения: 0 мин. 24 сек.

Не используйте template_redirect для загрузки своих шаблонов

Событие template_redirect не зря является популярным хуком в WordPress. Когда оно запускается, WordPress уже сделал свой основной запрос. Все объекты были созданы, но данные не были отправлены в браузер.

Это ваша последняя и лучшая точка для перенаправления пользователя на другой URL, но самое плохое место для загрузки альтернативного шаблона.

Неправильно

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

function mihdan_bad_load_template() {
    if ( some_condition() ) {
        include( SOME_PATH . '/some-custom-file.php' );
        exit();
    }
}
add_action( 'template_redirect', 'mihdan_bad_load_template' );

Главная и основная проблема этого сниппета заключается в том, что, если какой-то плагин или тема захотят использовать хук template_redirect для редиректов, — у них ничего не получится, так как этот код прерывает исполнение PHP-сценария при помощи exit().

Правильно

Если вам нужно просто подключить свой альтернативный шаблон по какому-то условию — используйте хук-фильтр template_include:

function mihdan_good_load_template( $original_template ) {
    if ( some_condition() ) {
        return SOME_PATH . '/some-custom-file.php';
    }

    return $original_template;
}
add_filter( 'template_include', 'mihdan_good_load_template' );

Вы добъётесь того же эффекта, но не сломаете чужой плагин или тему.

Запомните!

Главное правило: template_redirect — только для редиректов, template_include — для подключения своих шаблонов.

Ссылки

Автор: Кобзарёв Михаил

Русский разработчик со стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Joomla, Drupal, Opencart, Laravel, Moonshine.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

2 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
kek
kek
4 лет назад

указывайте источник перевода!

Предыдущая запись

Давайте дружить
в Телеграме

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы