web-dev-qa-db-ja.com

Wp_reset_postdata()を使うべきなのはなぜですか?

Wp_reset_postdataの使い方を理解できません。使用していないとどうなりますか。

https://codex.wordpress.org/Function_Reference/wp_reset_postdata

ここのドキュメントでは、メインクエリとセカンダリクエリは何ですか?

ありがとう

3

WordPressはグローバル$post変数を使用しています。こうすれば、postやpost_IDを関数のパラメータとして渡す必要がなくなります。それでthe_title()を呼び出すことができ、WPはどのタイトルが表示されるべきかを知っています。

サイト上にループが1つしかない場合は、この動作はうまくいきます。しかし、もしあなたがあなた自身のカスタムループを作成してそれらを繰り返すなら、あなたはグローバルな$post変数を修正します...

いくつかのサンプルを見てみましょう。これが記事 "News 01"のsingle.phpだとしましょう:

    ...
    while ( have_posts() ) : the_post();
?>
    <h1><?php the_title(); // it will show News 01 ?></h1>
    <?php the_content(); // it will show its content ?>

    <?php
        $related = new WP_Query( ... );
        while ( $related->have_posts() ) : $related->the_post();
    ?>
        <article>
            <h2><?php the_title(); // it will show other title ?></h2>
        </article>
    <?php endwhile; ?>

    <?php the_category(); // what will that show? categories for which post? ?>

最後の行には、最後の関連投稿のカテゴリが表示されます。どうして?これがグローバル$post変数がに設定されている投稿です。

しかし、endwhileの後にwp_reset_postdata();を呼び出すと、グローバル$postをグローバル$wp_queryオブジェクトからポストに戻すように設定されるので、すべてうまくいきます。

4