web-dev-qa-db-ja.com

ページ区切り取りの検索結果からすべての投稿データを取得する方法を教えてください。

自分のサイトで検索していて、結果として50の投稿があるとしましょう。ページ割り付けはページあたり10の投稿に設定されているので、私は結果の5ページを持っています。

結果の最初のページを開いているときに、グローバル変数$postsを調べると、現在の結果ページの10件の投稿に関するデータのみが表示されます。

どのページにアクセスしていても、どのようにしてすべての結果のデータにアクセスできますか。

2
mike23

ループ全体のメカニズムは、フィルタ処理された$ posts配列を持つことを基本にしています。そのため、 複数のループに関するループのドキュメント を見ると、使用する標準的なループコードの説明がPHPで得られます。

 <?php if (have_posts()) : ?>
           <?php while (have_posts()) : the_post(); ?>    
           <!-- do stuff ... -->
           <?php endwhile; ?>
 <?php endif; ?>

Have_posts()とthe_post()は、グローバルな$ wp_queryオブジェクトを囲む便利なラッパーです。ここにすべてのアクションがあります。 $ wp_queryはブログのヘッダで呼び出され、GETとPATH_INFOを通して入ってくる問い合わせ引数を渡します。 $ wp_queryは引数を取り、投稿の配列になるDBクエリを構築して実行します。この配列はオブジェクトに格納され、グローバルな$ posts配列に詰め込まれているブログのヘッダに返されます(古いポストループとの後方互換性のため)。

Have_posts()は$ wp_query-> have_posts()を呼び出すだけです。これはループカウンタをチェックしてpost配列にポストが残っているかどうかを確認します。そしてthe_post()は$ wp_query-> the_post()を呼び出します。これはループカウンタを進め、グローバル$ post変数とすべてのグローバル投稿データを設定します。いったんループを使い果たしたら、have_posts()はfalseを返します。

そのため、グローバルな$ postsはhave_posts関数に接続されています。これが正しく機能するためには、ページ付けされた投稿のリストのみを含めることができます。また、$ posts配列は下位互換性のためだけに存在しているため、直接アクセスしないことが最善です。

ですから、あなたはあなた自身のページネーションを設定するか、すべての投稿で別のオブジェクトを作成しなければならないでしょう。

後者をお勧めします。

2
icc97