【WordPress】メインループとサブループの違いを徹底解説!自作テーマでハマらないための基礎知識
2025年12月21日
目次
「なぜか動かない」の原因は、ループの理解不足かも?
自作テーマを作っていて、こんな経験はありませんか?
- サイドバーに新着記事を出したかったのに、メイン記事と同じものが表示される
- トップページで
WP_Queryを使ったら、ページ送りが動かない - カスタム投稿タイプの一覧が表示されない
これらのトラブルの9割は、WordPressの心臓部である「ループ(The Loop)」の仕組み、特に「メインループ」と「サブループ」の違いを理解していないことが原因です。
WordPressがどうやって記事を表示しているのか、その根本的な仕組みを理解します。これが分かると、自作テーマのカスタマイズが劇的に楽になります。
あわせて読みたい:【相対パスと絶対パス】画像が表示されないトラブルを解決する方法
WordPressの「ループ」とは何か?
WordPressは、データベースから記事のデータを持ってきて、それを順番に表示します。この「記事がある限り繰り返す」という処理のことを「ループ」と呼びます。
PHPのコードでよく見る、アレです。
while ( have_posts() ) : the_post();
// ここにタイトルや本文を表示するタグを書く
endwhile;
そして、このループには大きく分けて2種類あります。それが「メインループ」と「サブループ」です。
1. メインループ(Main Loop):WordPressが自動で用意する「定食」
メインループとは、「そのページのURLを見て、WordPressが自動的に用意してくれる記事データ」のことです。
例えば、あなたが「カテゴリーA」のページ(/category/a/)にアクセスしたとします。するとWordPressは、テンプレートファイルを読み込む前に、裏側で勝手に気を利かせてくれます。
WordPress(脳内):
「おっ、カテゴリーAのページへのアクセスだな。じゃあ、データベースからカテゴリーAの記事を最新順で10件持ってきたぞ。いつでも表示できるように準備完了だ!」
このように、何も言わなくても自動で用意される「日替わり定食」のようなものがメインループです。
自作テーマでメインループを使う主な場所
基本的に、そのページの「メインコンテンツ」を表示するテンプレートファイルでは、このメインループを使います。以下のファイルではメインループを使うのが基本です。
- 投稿ページ(
single.phpで記事のタイトルや本文を表示する場合) - カテゴリーアーカイブ(
category.phpでそのカテゴリーの記事一覧を表示する場合) - その他のアーカイブ(
archive.php,search.phpなど)
if ( have_posts() ) :
while ( have_posts() ) : the_post();
the_title( '', '
' );
the_content();
endwhile;
endif;
2. サブループ(Sub Loop):あなたが注文する「サイドメニュー」
対してサブループとは、「あなたが条件を指定して、意図的に持ってくる記事データ」のことです。主にnew WP_Query()を使って実装します。
例えば、記事の本文の下に「関連記事」を表示したいとします。メインループ(本文)とは全く別のデータが必要になりますね。
あなた(PHPコード):
「WordPressさん、すいません。メインの定食とは別に、追加で『同じタグが付いた記事をランダムで3つ』持ってきてもらえますか?」
自作テーマでサブループを使う主な場所
「メインの定食」だけでは足りない、以下のようなカスタマイズをしたい時にサブループの出番となります。
- こだわりのトップページ(front-page.phpなど)
最新のお知らせを3件だけ出したり、特定のカテゴリを並べたりする場合。 - 固定ページ(page.php)の中に記事一覧を出したい時
サービス案内ページの下に、実績記事を並べる場合など。 - サイドバーやフッター
「人気記事」や「最新のブログ5件」などを表示する場合。
$args = array( 'post_type' => 'post', 'posts_per_page' => 3 );
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
the_title();
endwhile;
wp_reset_postdata(); // 【重要】後片付け
endif;
【最重要】サブループの後は必ず「リセット」しよう!
サブループでデータを呼び出すと、WordPressは一時的にそのデータを「主役」だと勘違いしてしまいます。そのままにしておくと、その後に続く表示が崩れてしまいます。
endwhile; の直後には、必ず
wp_reset_postdata(); を書く!
まとめ:違いがわかれば自作テーマは怖くない
| 項目 | メインループ | サブループ (WP_Query) |
|---|---|---|
| データの決め手 | URL(アクセスしたページ) | 自分で書いたコード(引数) |
| 主な用途 | シングル・アーカイブのメイン記事 | トップページ・固定ページ・サイドバー |
| ページネーション | そのまま動く | 一工夫必要(解決策はこちら) |
| リセット処理 | 不要 | 必須 (wp_reset_postdata) |
ループの違いがわかったら、次は「サブループでのページネーション」に挑戦してみましょう。ここが自作テーマ制作最大の難所です!
▶︎ 【解決】サブループでWP-PageNaviを動かすPHP実装術
