Значение сниппета "if ( is_home() && ! is_front_page() )"?
Я часто вижу следующий код в файлах index.php. Я понимаю, что is_front_page()
возвращает true при просмотре главной страницы сайта (независимо от того, отображается ли индекс записей блога или статическая страница), в то время как is_home()
возвращает true при просмотре индекса записей блога (независимо от того, отображается ли он на главной странице или на статической странице). Я все еще несколько озадачен использованием следующего кода -
<?php if ( have_posts() ) : ?>
<?php if ( is_home() && ! is_front_page() ) : ?>
<header>
<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
</header>
<?php endif; ?>
Буду признателен за любое объяснение, почему этот фрагмент кода так популярен.

Вот как это сделать правильно:
if ( is_front_page() && is_home() ) {
// Главная страница по умолчанию
} elseif ( is_front_page()){
// Статическая главная страница
} elseif ( is_home()){
// Страница блога
} else {
// Все остальные страницы
}
Это единственный (правильный) способ отображать или изменять контент для главной страницы и страницы блога.

Это отобразит заголовок страницы, когда для отображения записей выбрана статическая страница.
Пример:
Если записи отображаются на главной странице... Ничего не произойдет.
Если, например, записи отображаются на странице с заголовком Новости... Будет показан заголовок Новости в теге H1.
Это используется для того, чтобы заголовок страницы отображался, когда записи выводятся на отдельной странице, но не показывался, когда записи блога выводятся на главной странице.
Мы делаем так, потому что если это главная страница... будет отображаться заголовок первой записи, создавая двойное отображение (один раз вверху в H1 и снова при переборе записей).

Спасибо, Shramee. Я обнаружил заголовок индексной страницы своего блога в теге <h1>, пытаясь разобраться, но фактически он нигде не отображается. Думаю, некоторые разработчики тем используют его только для помощи людям с программами чтения с экрана, а затем скрывают сам текст, что может немного сбивать с толку новичков, если это не задокументировано или не прокомментировано.

Я не уверен насчет "популярности", мне так не кажется (хотя я и не смотрю на такое количество тем).
Вы, кажется, хорошо понимаете, что делает каждое условие, так что это не должно вас смущать. Здесь условия объединяются, чтобы проверить, что отображается индекс блога и это не главная страница.
Ах, причина использования single_post_title()
, я полагаю, в том, что она выводит заголовок для $wp_query->queried object
(установленного основным запросом как текущий контекст), а не для глобальной переменной $post
(установленной при итерации цикла).
В некоторых случаях они будут одинаковыми, но не в таком случае, как проверяет условие. Цикл будет содержать записи, но запрашиваемый объект будет страницей (если я ничего не путаю :).
