if (is_home () &&! is_front_page ())

23

Я вижу следующий код в файлах 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; ?>

Любое объяснение того, почему этот кусок кода так популярен, очень ценится.

olliew
источник

Ответы:

15

Это будет отображать заголовок страницы, когда статическая страница настроена на показ сообщений.

Например

Я показываю сообщения на моей домашней странице ... Это ничего не даст.

Если бы я, скажем, показать посты на странице под названием News ... Он будет показывать новости в H1.

Это используется для отображения заголовка страницы всякий раз, когда сообщения отображаются на странице, но ничего, когда сообщения блога отображаются на главной странице (домашней странице).

Мы делаем это потому, что если он находится на домашней странице ... он будет показывать заголовок первого сообщения, делая его отображаемым дважды (один раз вверху в H1 и снова, когда сообщения проходят в цикле).

shramee
источник
Спасибо, Шрами. Я нашел заголовок моей индексной страницы блога в <h1>, когда пытался выяснить это, но на самом деле он нигде не появляется. Я думаю, что некоторые разработчики используют его только для того, чтобы помочь людям, использующим программы чтения с экрана, а затем скрывают фактический текст, что немного запутывает новичков, если его не комментируют / не документируют.
olliew
Хорошо ... Это помогает узнать, в каком контексте используются посты (как в приведенном выше примере для новостей), но в основном это относится к SEO , H1 играет большую роль, помогая поисковым роботам лучше понимать содержание страницы.
Шрам
26

Вот как это сделать правильно:

if ( is_front_page() && is_home() ) {
// Default homepage

} elseif ( is_front_page()){
// Static homepage

} elseif ( is_home()){

// Blog page

} else {

// Everything else

}

Это единственный (правильный) способ отображения или изменения содержимого с помощью домашней страницы и страницы блога.

Маунт Абунасер Хан
источник
4

Я не уверен насчет «популярности», мне так не кажется (но тогда я не смотрю на столько тем).

Кажется, вы прекрасно понимаете, что делает каждое условие, поэтому это не должно вас смущать. Это объединяет условия для проверки того, что индекс блога отображается, а его нет на первой странице.

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

В некоторых случаях они будут такими же, но не в таких случаях, как проверка условий. Цикл будет содержать сообщения , но запрашиваемый объект будет страницей (если я не перепутал :).

Rarst
источник
Я недавно просматривал множество шаблонов, и это очень распространено. Вы правы, что я понимаю, что делает цикл, я просто не понимаю, почему люди решили сделать это именно таким образом. Зачем использовать single_post_title, а не the_title ()?
olliew