
🖥 Как показывать контент только на главной странице WordPress
Вы заходите в админку WordPress и понимаете: баннер с акцией должен висеть на главной, но на страницах постов он смотрится навязчиво. Или виджет подписки, на главной он собирает емейлы, а в теле статьи просто занимает место. Знакомая ситуация?
WordPress не даёт встроенного переключателя «показывать только на главной», но решается задача элементарно, двумя строками PHP. Без плагинов, без костылей в functions.php с догадками «а вдруг сработает». Ниже, три проверенных метода, от условных тегов до шаблонов темы, с понятными примерами кода и объяснением разницы между is_front_page() и is_home().
💡 Быстрый обзор:
- Используйте is_front_page() в header.php или footer.php темы
- Понимайте разницу между is_front_page и is_home
- Для замены целых блоков создайте отдельные файлы шаблона
- Никакие плагины не нужны
Что такое условные теги WordPress
Условные теги, это встроенные PHP-функции WordPress, которые проверяют условия и возвращают true или false. Они работают как развилка «если страница главная, покажи баннер, иначе, ничего не делай».
В ядре WordPress таких функций десятки: is_single() для отдельных записей, is_page() для страниц, is_category() для рубрик, is_404() для несуществующих адресов, is_search() для страницы поиска и другие. Они позволяют точечно управлять выводом контента без правки каждого шаблона вручную, проверка срабатывает на лету при загрузке страницы.
Для задачи «только на главной» ключевых тегов два: is_front_page() и is_home(). Они похожи, но ведут себя по-разному в зависимости от настроек чтения, и путаница между ними стоила новичкам не одного часа отладки.
Метод 1: is_front_page(), основной инструмент
is_front_page() возвращает true, когда посетитель находится на главной странице сайта, той самой, что открывается по корневому URL (https://вашсайт.ru/). Это ваш главный инструмент для подавляющего большинства задач с homepage-only контентом.
Базовый синтаксис:
1 <?php if ( is_front_page() ) : ?> 2 <div class="homepage-banner"> 3 <p>Специальное предложение только для посетителей сайта!</p> 4 </div> 5 <?php endif; ?> 6
Разместите этот код в header.php (сразу после открывающего тега <body>) или в footer.php, баннер появится исключительно на главной, а на всех остальных страницах его не будет.
Пример с выводом произвольного HTML-блока:
1 <?php if ( is_front_page() ) : ?> 2 <section class="hero-promo"> 3 <h2>Бесплатная консультация</h2> 4 <p>Оставьте заявку — и мы перезвоним в течение 15 минут.</p> 5 </section> 6 <?php endif; ?> 7
Этот же подход работает для рекламных скриптов, кастомных стилей или отдельного шорткода, оборачиваете нужный блок в if ( is_front_page() ), и он загружается только там, где нужен.
Важный нюанс: функция должна вызываться после того, как WordPress выполнил основной запрос к базе данных. Не ставьте её в functions.php вне хуков, до срабатывания экшена wp она вернёт false. Безопасное размещение: внутри файлов темы: header.php, footer.php, sidebar.php, front-page.php. Либо на хуках: wp, template_redirect, wp_head.
Метод 2: is_home(), для страницы блога
is_home() возвращает true, когда посетитель находится на странице, где выводятся последние записи блога. И вот здесь скрыта ловушка, в которую попадают почти все новички.
Код выглядит так же просто:
1 <?php if ( is_home() ) : ?> 2 <p>Подпишитесь на нашу рассылку — новые статьи каждую неделю.</p> 3 <?php endif; ?>
Разница, в настройках. Зайдите в админку: Настройки → Чтение → На главной странице отображать. Если у вас выбран вариант «Ваши последние записи», то is_front_page() и is_home() работают одинаково, оба вернут true на главной. Но если выбрана «Статическая страница», то:
is_front_page()→trueна той статической странице, которую вы назначили домашнейis_home()→trueна странице, которую вы назначили для вывода записей (даже если она физически находится по адресу/blog/)
Иными словами: is_home() привязан к странице блога, а не к главной странице сайта. Если у вас статический сайт-визитка и блог вынесен в /blog/, то is_home() на главной (/) вернёт false.
is_front_page() vs is_home(): сравнительная таблица
Сценарий | Настройки чтения | is_front_page() | is_home() |
|---|---|---|---|
Главная = последние записи | «Ваши последние записи» |
|
|
Главная = статическая страница (посетитель на | Статическая страница + страница блога отдельно |
|
|
Страница блога = | Статическая страница + страница блога отдельно |
|
|
Любая другая страница или пост | Любые настройки |
|
|
Правило простое: нужен контент строго на главной, берите is_front_page(). Нужен контент на странице с лентой записей (независимо от того, главная она или нет), берите is_home().
На практике большинство задач решается именно is_front_page(). is_home() пригождается, когда блог вынесен на отдельную страницу и вы хотите, например, показывать виджет «Популярные записи» именно там, а на главной-визитке, нет.
Метод 3: отдельные файлы шаблона
Когда нужно заменить не строку-другую, а целый структурный блок, боковую панель, подвал или шапку, оборачивание каждого элемента в if становится громоздким. WordPress поддерживает механизм специфичных файлов шаблона: вы создаёте файл для конкретной страницы, а ядро подхватывает его автоматически.
Шаг 1. Создайте новый файл. В папке вашей темы создайте один из трёх вариантов:
sidebar-home.php, боковая панель для главнойfooter-home.php, подвал для главнойheader-home.php, шапка для главной
Шаг 2. Наполните содержимым. Поместите в файл HTML и PHP, которые должны показываться только на главной. Например, sidebar-home.php:
1 <div class="homepage-sidebar"> 2 <h3>О нашем проекте</h3> 3 <p>Мы помогаем малому бизнесу запускать сайты на WordPress с 2018 года.</p> 4 5 <h3>Подписка</h3> 6 <?php echo do_shortcode( '[newsletter_form]' ); ?> 7 </div> 8
Шаг 3. Вызовите файл в шаблоне. В front-page.php или index.php (зависит от темы) замените стандартный вызов:
1 <?php get_sidebar( 'home' ); ?> 2 <?php get_footer( 'home' ); ?> 3 <?php get_header( 'home' ); ?>
WordPress по аргументу 'home' автоматически подставит файлы sidebar-home.php, footer-home.php и header-home.php соответственно. Если файл не найден, откатится к стандартному sidebar.php.
Когда этот метод оправдан. Выбирайте шаблонный подход, если:
- Меняется весь блок целиком (не одна кнопка, а вся структура сайдбара)
- В теме уже используется
front-page.phpи логика не смешивается - Вы планируете поддерживать сайт долго и хотите, чтобы файлы были организованы чисто
Для небольших правок метод избыточен, условных тегов is_front_page() достаточно.
Возможные ошибки и как их избежать
Вызов до инициализации запроса. Самая частая проблема: is_front_page() в functions.php без хука. Функция молча возвращает false, и вы думаете, что код не работает. Решение: всегда оборачивайте проверку в хук wp или template_redirect:
1 add_action( 'wp', 'my_homepage_content' ); 2 function my_homepage_content() { 3 if ( is_front_page() ) { 4 add_action( 'wp_head', 'my_homepage_banner' ); 5 } 6 }
Путаница с настройками чтения. Если перевели сайт со статической главной на ленту записей и забыли об этом, is_home() вдруг начинает срабатывать там, где не должен. Проверьте Настройки → Чтение в первую очередь.
Жёсткое кодирование ID страницы. Некоторые разработчики проверяют if ( get_the_ID() == 5 ) вместо is_front_page(). Это хрупко: смените главную страницу в настройках, и всё сломается. Используйте условные теги, они следят за настройками автоматически.
Тема условных тегов WordPress раскрыта в этом видео глубже, от is_page() до кастомных условий для нестандартных шаблонов. Если работаете с темами регулярно, 15 минут просмотра сэкономят часы отладки в будущем.
⁉️🤔 Частые вопросы
Что выбрать: is_front_page() или is_home()?
В большинстве случаев,
is_front_page(). Она возвращаетtrueна главной странице сайта независимо от того, статическая это страница или лента записей.is_home()используйте только когда вам нужна именно страница блога (например,/blog/), а не главная.
Можно ли использовать оба тега одновременно?
Да, конструкция
if ( is_home() && ! is_front_page() )возвращаетtrueтолько на странице блога, когда она не является главной. Полезно для сайтов со статической главной и отдельным разделом записей.
Работает ли is_front_page() с плагинами кеширования?
Да, но с оговоркой. Условные теги срабатывают на стороне сервера до отдачи HTML, кеш-плагины (WP Rocket, W3 Total Cache) на это не влияют. Однако с ESI-блоками (Edge Side Includes) проверьте, что ваш кеш-плагин их поддерживает.
Как вывести разный контент на главной для авторизованных и неавторизованных пользователей?
Скомбинируйте
is_front_page()сis_user_logged_in(). Для авторизованных, персональное приветствие, для гостей, призыв к регистрации. Код занимает пять строк и вставляется вheader.php:
1 <?php if ( is_front_page() && is_user_logged_in() ) : ?> 2 <p>С возвращением! Вот ваши последние заказы.</p> 3 <?php elseif ( is_front_page() ) : ?> 4 <p>Добро пожаловать! Зарегистрируйтесь для персональных скидок.</p> 5 <?php endif; ?>
Нужно ли дочерней теме создавать свои файлы header-home.php?
Если родительская тема уже содержит
header-home.php, дочерняя тема автоматически его наследует. Чтобы переопределить, создайте файл с тем же именем в папке дочерней темы. WordPress сначала ищет шаблон в дочерней теме и только потом в родительской.
Что ставить в 2026 году: условный тег или отдельный файл?
Выбор сводится к масштабу задачи. Запомните простое правило: одна строка кода или один HTML-блок, берите is_front_page(). Меняется целый структурный блок (сайдбар, подвал, шапка) с собственной вёрсткой и логикой, создавайте отдельные файлы шаблона.
На практике большинство задач с homepage-only контентом закрываются двумя строками условного тега. Это быстро, не плодит лишних файлов в теме и легко читается при поддержке сайта через полгода, вы не гадаете, зачем создавали sidebar-home.php, а видите явную проверку прямо в шаблоне.
Попробуйте прямо сейчас: откройте header.php активной темы, найдите место после <body> и добавьте тестовый блок с is_front_page(). Если всё работает, вы освоили условные теги WordPress за пять минут.



