web-dev-qa-db-ja.com

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

私は次のコードをindex.phpファイルにたくさん見ます。 is_front_page()はサイトのフロントページを表示するとき(ブログ投稿インデックスを表示するか静的ページを表示するか)にtrueを返すのに対し、is_home()はブログ投稿インデックスを表示するとき(フロントページに表示するか静的ページか)私はまだ以下のコードの使用についていくらか困惑しています -

        <?php if ( is_home() && ! is_front_page() ) : ?>
            <header>
                <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
            </header>
        <?php endif; ?>

このコードが非常に人気がある理由の説明は大歓迎です。

14
olliew

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

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

私が言うならば、 News ...というタイトルのページに投稿を表示します。それはH1に News を表示します。

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

これは、ホームページにある場合は最初の投稿のタイトルを表示し、2回表示されるようにするためです(H1の上部に1回、投稿がループスルーされると再度表示されます)。

11
shramee

これを正しく行う方法は次のとおりです。

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

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

} elseif ( is_home()){

// Blog page

} else {

// Everything else

}

これがあなたのホームページやブログページでコンテンツを表示したり変更したりする唯一の(正しい)方法です。

18

私は "ポピュラー"についてはよくわかりません、それは私にはそうではありません(しかし、その後、私はその多くのテーマを見ていません)。

あなたはそれぞれの条件が何をするのかよく理解しているように見えるので、これはあなたを混乱させるべきではありません。これは条件を組み合わせて、ブログのインデックスがフロントページに表示されていることを確認するためにandnotです。

ああ、single_post_title()の理由は、$wp_query->queried object global(繰り返しのループで設定される)ではなく$post(現在のコンテキストとしてメインのクエリで設定される)のタイトルを表示するからです。

状況によってはこれらは同じになりますが、条件チェックのような場合は違います。ループには posts が含まれますが、照会されたオブジェクトは page になります(混乱しない限り:)。

4
Rarst

表示方法

静的ページのテキスト+投稿

私のブログで: https://бригада-будівельників.укр

このコードでそれをどのように分析するのか:


<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">

    <?php
    if ( have_posts() ) :

        if ( is_home() && ! is_front_page() ) : ?>
            <header>
                <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
            </header>

        <?php
        endif;

        /* Start the Loop */
        while ( have_posts() ) : the_post();

            /*
             * Include the Post-Format-specific template for the content.
             * If you want to override this in a child theme, then include a file
             * called content-___.php (where ___ is the Post Format name) and that will be used instead.
             */
            get_template_part( 'template-parts/content', get_post_format() );

        endwhile;

        the_posts_navigation();

    else :

        get_template_part( 'template-parts/content', 'none' );

    endif; ?>




    </main><!-- #main -->
</div><!-- #primary -->

enter image description here 

0
Yaroslav Kostak