Skip to content

Всё для WordPress, веб-разработки — и не только

🖥 Как показывать контент только на главной странице WordPress

🖥 Как показывать контент только на главной странице 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()

Главная = последние записи

«Ваши последние записи»

true

true

Главная = статическая страница (посетитель на /)

Статическая страница + страница блога отдельно

true

false

Страница блога = /blog/ (посетитель на /blog/)

Статическая страница + страница блога отдельно

false

true

Любая другая страница или пост

Любые настройки

false

false

Правило простое: нужен контент строго на главной, берите 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:

1add_action( 'wp', 'my_homepage_content' );
2function 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 за пять минут.