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

WordPress 最終更新日:2020/02/14 公開日:2013/02/20

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

CONTACT

Webサイト制作のご相談やご質問、ご不明点などございましたらこちらよりお問い合わせください。
「ホームページ制作について」とお伝えください。担当者におつなぎいたします。

オフィス一覧へ

受付時間|9:00~18:00(土・日・祝除く)

※お電話にてお問い合わせの際はオフィス一覧からお近くのオフィスにご連絡ください

※全国対応

ホームページ無料診断 毎月10社限定

ホームページ制作のプロがユーザビリティ・SEO・競合などを多角的に分析し、
具体的な改善案をご提案します。

無料診断する