Когда использовать is_home() и is_front_page()?
Я обнаружил, что is_front_page
возвращает true, когда я просматриваю главную страницу и на ней есть назначенная закрепленная запись.
Она также возвращает true, когда я назначил страницу в качестве статической главной страницы через Настройки > Чтение.
В каких случаях мне может понадобиться использовать is_home()
?

is_front_page()
возвращает true, если пользователь находится на странице или странице записей, которая установлена как главная в Настройки->Чтение->Ваша главная страница.
Например, если вы установите страницу о нас
как главную, то это условие будет истинным только при отображении страницы о нас.
is_home()
возвращает true, когда отображается страница со списком записей. Обычно это страница, которая показывает последние 10 записей.
Если настройки в разделе Ваша главная страница отображает оставлены по умолчанию, то главная страница будет возвращать true и для is_front_page()
, и для is_home()
.
Пример использования is_home()
:
- Вы установили страницу записей на страницу под названием Новости.
- Пользователь переходит на неё, и в шапке вы хотите показать дополнительную навигацию.
- Вы можете использовать
is_home()
для этого.

Именно. Я различаю это следующим образом: is_front_page()
возвращает true при просмотре Главной страницы сайта (независимо от того, отображается ли индекс записей блога или статическая страница), тогда как is_home()
возвращает true при просмотре Индекса записей блога (независимо от того, отображается ли он на главной странице или на статической странице).

Я обнаружил, что функции is_home()
и is_front_page()
не работают так, как ожидается, в мультисайтах. Моё решение с использованием встроенных возможностей PHP:
if($_SERVER['REQUEST_URI'] == '/') {
// вы находитесь на главной странице
}
Как упоминалось в комментариях, этот подход не будет работать для установок WordPress в поддиректориях корневой веб-папки. Используйте на своё усмотрение.

Пожалуйста, подробнее объясните, почему оно не работает так, как ожидается.

На главном сайте мультисайта, если вы используете любую форму is_home()
или is_front_page()
на статической или блоговой главной странице, обе функции вернут false.

Я только что протестировал оба условия в среде мультисайта, и оба вернули true при посещении соответствующих страниц /
.

Я использую WordPress VVV бокс с плагином для мультисайта: https://github.com/Varying-Vagrant-Vagrants/vvv-multisite Возможно, в нём что-то неправильно настроено? В любом случае, оставляю ответ с обходным решением на случай, если кто-то столкнётся с похожей ситуацией.

Ваш код почти идеален, единственное: что если WordPress установлен в подкаталоге, например /blog или /wordpress? Тогда это будет бесполезно.

@RemziCavdar это правда. Я отредактирую свой ответ. К сожалению, из-за множества способов хостинга WordPress вы сталкиваетесь со множеством проблем.

Функцию is_home()
следует использовать, когда вам нужно проверить, просматривает ли пользователь список записей блога (обычно отображается по 10 записей на странице). Если в вашей теме есть файл home.php
, он будет отображаться, когда условие is_home()
возвращает true.
Следующее пояснение может помочь избежать путаницы: если условия is_front_page()
и is_home()
возвращают true одновременно, будет использоваться шаблон front-page.php
вместо home.php
.

- Вы посещаете главную страницу, которая является домашней страницей блога => is_front_page() = TRUE && is_home() = TRUE
- Вы посещаете главную страницу, которая является статической страницей => is_front_page() = TRUE && is_home() = FALSE
- Вы посещаете домашнюю страницу блога, но ваша главная страница является статической => is_front_page() = FALSE && is_home() = TRUE (Также TRUE при переходе на страницы с пагинацией)
Ссылки на определения:
https://developer.wordpress.org/reference/functions/is_home/ https://developer.wordpress.org/reference/functions/is_front_page/
