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


23

index.phpファイルには次のコードがたくさんあります。is_front_page()サイトフロントページを表示すると(ブログ投稿インデックスまたは静的ページをis_home()表示する場合)true を返し、ブログ投稿インデックスを表示する場合(フロントページまたは静的ページに表示する場合)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; ?>

このコードがとても人気がある理由の説明は大歓迎です。

回答:


15

静的ページが投稿を表示するように設定されている場合、これによりページのタイトルが表示されます。

例えば

ホームページに投稿を表示しています...何もしません。

たとえば、「ニュース」というタイトルのページに投稿を表示すると、H1にニュースが表示されます。

これは、ページに投稿が表示されるたびにページのタイトルが表示されるように使用されますが、ブログの投稿がフロントページ(ホームページ)に表示されるときには何も表示されません。

ホームページにある場合、最初の投稿のタイトルが表示され、2回表示されます(H1の上部に1回、投稿がループされたときに再び表示されるため)。


シュラミー、ありがとう。ブログのインデックスページのタイトルを見つけようとしたときに<h1>で見つけましたが、実際にはどこにも表示されません。スクリーンリーダーを使用している人々を助けるためだけにそれを使用し、コメント/文書化されていない初心者にとっては少し混乱していると思う人もいます。
-olliew

さて...どのコンテキスト投稿で使用されているかを知るのに役立ちます(上記のNewsの例のように)が、主にSEOにあります。H1は、検索ボットがページコンテンツをよりよく理解するのに役立ちます。
shramee

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グローバル(反復ループで設定)ではなく(メインクエリで現在のコンテキストとして設定)のタイトルを表示することです。

状況によってはこれらは同じになりますが、条件チェックなどの場合はそうではありません。ループにはpostsが含まれますが、クエリされたオブジェクトはページになります(私が物事を混ぜていない限り:)。


私は最近たくさんのテンプレートを調べてきましたが、それは非常に一般的です。ループが何をしているのかを理解していることは正しい。the_title()ではなくsingle_post_titleを使用する理由
-olliew
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.