Facebook Twitter RSS
WP_Query関数を使いWordPressのindex.phpやarchive.phpに入れ子になったループ(複数ループ)を作成する方法

WP_Query関数を使いWordPressのindex.phpやarchive.phpに入れ子になったループ(複数ループ)を作成する方法

facebook twitter hatena Pocket

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=”で表示件数など、自身で要求する内容をカスタマイズしてみてください。

facebook twitter hatena Pocket
前のページ
次のページ
ページトップ