私は 2 つの異なるアプローチでカスタム WordPress ループを作成してきましたが、どちらもWP_Query
オブジェクトの新しいインスタンスを作成する必要があります。通常、1 つのページに複数のループがあります。
これら 2 つのアプローチの違いと、それぞれを使用する正しいコンテキストを理解できません。
アプローチ 1: http://codex.wordpress.org/Class_Reference/WP_Query
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
// output
endwhile;
endif;
wp_reset_postdata();
アプローチ 2: http://codex.wordpress.org/Function_Reference/wp_reset_postdata
$original_query = $wp_query;
$wp_query = null;
$wp_query = new WP_Query( $args );
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// output
endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();
どちらも同じ結果が得られるように見えますが、 をオンにWP_DEBUG
すると、次のような 2 番目のアプローチでエラーが表示されます。
注意: is_singular が間違って呼び出されました。条件付きクエリ タグは、クエリが実行される前には機能しません。
私の質問は次のとおりです。
$original_query = $wp_query;
いつアプローチを使用する必要がありますか?- 保存と復元の関連性は何
$wp_query
ですか? - 使用するとエラー メッセージが返されるのはなぜですか?