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/). Це ваш головний інструмент для переважної більшості задач із контентом лише для головної.

Базовий синтаксис:

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(). Змінюється цілий структурний блок (сайдбар, підвал, шапка) із власною версткою та логікою, створюйте окремі файли шаблону.

На практиці більшість задач із контентом лише для головної закриваються двома рядками умовного тега. Це швидко, не плодить зайвих файлів у темі та легко читається під час підтримки сайту через пів року: ви не гадаєте, навіщо створювали sidebar-home.php, а бачите явну перевірку прямо в шаблоні.

Спробуйте прямо зараз: відкрийте header.php активної теми, знайдіть місце після <body> і додайте тестовий блок із is_front_page(). Якщо все працює, ви освоїли умовні теги WordPress за п’ять хвилин.