WP_Query関数を使いWordPressのindex.phpやarchive.phpに入れ子になったループ(複数ループ)を作成する方法
WordPressのindex.phpやarchive.phpに使用されているメインループの中に、投稿記事や固定ページ記事内に記述されたループ処理を、入れ子の様な形で反映させる方法を解説します。
ループの中にループを反映させられるようになれば、例えばECサイトの各商品ページ(page.php)にカスタム投稿タイプで作成した商品情報の投稿をループで表示させ、商品一覧ページ(archive.php)にも、その各商品ページに作ったループを反映させるということが可能になります。
query_post関数の使用には要注意
ループを作るためには、投稿の表示設定をするためのquery_post関数がよく使用されますが、これはメインループでのみで使用できるテンプレートタグだということです。
複数使ってしまうと表示件数がおかしくなってしまったり、ページネーションが上手く機能しなくなってしまったりと、トラブルが起こる原因になりかねません。
WP_Queryを使ったループ処理の記述例と補足
そこで、固定ページ記事や投稿ページに記載したループの内容を、インデックスやアーカイブのメインループに反映させたい時には、WP_Query関数を使ったこんな記述を、固定ページや投稿のループに使用してみてください。
<?php $temp = $wp_query; $wp_query = null; $wp_query = new WP_Query(); $wp_query->query('post_type=post' . '&posts_per_page=3' . '&paged=' . $paged); ?> <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <!-- ループ内容の指定 --> <?php endwhile; ?> <?php $wp_query = null; $wp_query = $temp; ?>
4行目で引数を指定していいますが、query_post関数の引数と共通していますので、”post_type=”で呼び出したい記事タイプを指定したり、”cat=”でカテゴリID、”posts_per_page=”で表示件数など、自身で要求する内容をカスタマイズしてみてください。