web-dev-qa-db-ja.com

'setup_postdata()'を 'wp_reset_postdata()'でリセットする必要がありますか?

例から始めるとより理にかなっているので、これは関数の例です:

function seo_meta_tags() {
    global $post;

    if( is_singular() ) {

        setup_postdata( $post );

        $description = str_replace( '... <a class="read-more" href="' . get_permalink() . '">Cont. reading &rarr;</a>', '...', get_the_excerpt() );

        wp_reset_postdata();

        echo '<meta itemprop="description" name="description" content="' . $description . '">';

    }
}

注:このコードは、達成しようとしていることを示すためのものです。それ。

ここまで来たら、例に示すようにsetup_postdata( $post )wp_reset_postdata()で閉じるべきでしょうか。

2
its_me

setup_postdata めちゃくちゃになっている 他のループ( The Loop を含む)によって使われる可能性がある(たぶん:are)グローバル変数を使って、常にリセットすべきですこれらの変数は、メインのクエリに従って(つまり、WordPressが最初にユーザーが望んでいたと思うことに応じて)本来あるべきものへと変化します。
さらに、setup_postdataには$postグローバル(への参照)が提供されていますが、これは後で変更される可能性があります。

したがって、はい、 setup_postdatawp_reset_postdata を伴う必要があります。

コード からわかるように、reset_postdata関数は、実際には original setup_postdataオブジェクトに対して$postを呼び出しています。

5
tfrommen