WordPressコーデックスやさまざまなテーマで読んだことがあります。ブログループのendif;
の後に<?php wp_reset_postdata(); ?>
を挿入している開発者もいれば、ブログループのendwhile;
とendif;
の間にコードを挿入する開発者もいます。私は両方の場所を試しましたが、違いはまだ見えていません。正しい場所はありますか?wp_reset_postdata()を配置する必要があります。終わった後。またはendif; ?
答えて
wp_reset_postdata()
は、セカンダリループ(ページで追加のクエリを実行している場合)のみ必要です。この関数の目的は、グローバルポスト変数をメインクエリの現在のポストに戻すことです。
例:私は単に記事を表示するメインループを使用している上記のコードで
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
OUTPUT MAIN POSTS HERE
<?php endwhile; endif; ?>
。 wp_reset_postdata()
を含める理由はありません。グローバルポスト変数はまさにそれが想定していたものです。
ページのどこかで2次ループを追加する場合は、wp_reset_postdata()
が必要です。それは通常endwhile
後とendif
の前に来る:あなたの元の質問に答えるために
// This query is just an example. It works but isn't particularly useful.
$secondary_query = new WP_Query(array(
'post_type' => 'page'
));
if ($secondary_query->have_posts()) :
// Separating if and while to make answer clearer.
while ($secondary_query->have_posts()) : $secondary_query->the_post();
// OUTPUT MORE STUFF HERE.
endwhile;
wp_reset_postdata();
endif;
。実際にグローバルポスト変数を変更するのはthe_post()
への呼び出しです。投稿がない場合、投稿変数は同じままであり、リセット機能を使用する理由はありません。
あなたが実行seconderyクエリをリセットすることになって、この関数は..機能the_post
は、あなたがそうでthe_title()
the_content
などのループ内で実行することができ、すべての機能を利用することができせます。..
だから、リセットthe_post
機能を使用し、endwhile;
の後には、既にリセットすることができます。あなたが好きであれば、if
の文の中にあなたの主な質問を使用してください。
<?php
// this is the main query check if there is posts
if (have_posts()) :
// loop the main query post and run the_post() function on each post that you can use the function the_title() and so on..
while (have_posts()) : the_post();
the_title(); // title of the main query
// the is second query
$args = array('posts_per_page' => 3);
$the_query = new WP_Query($args);
// check if there is a posts in the second query
if ($the_query->have_posts()) :
// run the_post on the second query now you can use the functions..
while ($the_query->have_posts()) : $the_query->the_post();
the_title();
the_excerpt();
endwhile;
// reset the second query
wp_reset_postdata();
/* here we can use the main query function already if we want..
its in case that you want to do something only if the second query have posts.
You can run here third query too and so on...
*/
the_title(); // title of the main query for example
endif;
endwhile;
endif;
?>
ご回答ありがとうございます。 'have_posts'がプライマリクエリで、' the_post'がセカンダリクエリです。これを念頭に置いて、私は '<?php wp_reset_postdata(); ?> 'endwhile;の後に(あなたの例のように)、私は' <?php the_title();を防ぐでしょう。 ?> 'と' <?php the_excerpt(); ?> '私の次のBlog Loopに持ちこたえたら、私は1つ入れるべきですか? – Craig
私はあなたがそれをよりよく理解するのを助けるためにいくつかのコメントを付けてコードを編集しました。 – Shibi
Shibiありがとうございます。完全に100%は確かではありませんが、確かに正しい方向に私を指摘しました。上記のコメントを使用してコーディングを手伝ってください。うまくいけば、これで私の理解が完了します。 – Craig
- 1. アプリケーションが終了した後にアイコンが消える必要があります
- 2. ルックアップテーブルはマイクロサービスアーキテクチャに配置する必要がありますか?
- 3. ajaxバックエンドファイルはコードシニターに配置する必要があります
- 4. wp_reset_query()またはwp_reset_postdata()
- 5. MediaPlayerをサービスに配置する必要がありますか?
- 6. コールバックをレールアプリケーションに配置する必要がありますか?
- 7. 右側にブートストラップメニューアイコンを配置する必要があります
- 8. カスタムコントロールをApp_Codeに配置する必要がありますか?
- 9. UITearchViewにUISearchBarを配置する必要がありますか?
- 10. イメージをMSMQに配置する必要があります
- 11. 無効なブロックタグ: 'elif'、 'else'または 'endif'があります
- 12. Amazon RDS:停止または終了する必要がありますか?
- 13. XSLコンパイルエラーです.mlinkは ';'で終わる必要があります。
- 14. アプリケーションラッパーは.appで終わる必要があります。私のアプリケーションを提出するために
- 15. UIViewControllerはUINavigationControllerの背後に隠れていますが、下に配置する必要があります
- 16. は、値が行の最後に到達したときにマクロを終了する必要があります
- 17. キーワード 'with' ... ...の前にある誤った構文は、セミコロンで終了する必要があります。
- 18. イメージ(#70365286921100)が必要です、配列がありました(#70365535770260)
- 19. BannerAdはFragmentコンテナまたはFragmentのレイアウトに配置する必要がありますか?
- 20. Silverlight Webリソースの場合、エンティティフォームにxapまたはHTMLを配置する必要があります
- 21. MVVM、モデルまたはビューモデル(コントローラ)にロジックを配置する必要があります
- 22. main関数とmain()をプログラムの先頭または末尾に配置する必要がありますか?
- 23. POD構造体を.hファイルまたは.cppファイルに配置する必要がありますか?
- 24. @Controllerまたは@SessionAttributesをSuperControllerクラスに配置する必要がありますか?
- 25. CSSまたはJSなしで画像の上にテキストを配置する必要があります
- 26. F#関数をモジュール、クラス、または別の構造体に配置する必要がありますか?
- 27. はウェブページの中央にリストを配置する必要があります
- 28. AssemblyTrademarkAttributeには何を配置する必要がありますか?
- 29. C#:グラフィックス要素をカスタムコントロール内に配置する必要はありますか?
- 30. 絶対配置された要素にマウスイベントがあります
Nathan Dawsonありがとうございます。とても有難い。 – Craig