本ページはプロモーションが含まれています

【WordPress】WP-PageNaviをテーマで動かすPHP実装術。メイン・サブループ別の書き方

2025年12月21日

wp-pagenavi-custom-query

「なぜか表示されない」の正体はループの使い分けミス?

自作テーマを作っていると必ず直面するのが、「記事が表示されない」「ページ送りが動かない」といったトラブルです。

その原因のほとんどは、WordPressの基本である「メインループ」と「サブループ」の使い分けができていないことにあります。

この記事でわかること:
どのページで「メイン」を使い、どこで「サブ」を使うべきか。自作テーマ制作の現場で役立つ具体的なファイル名とともに解説します。

あわせて読みたい:【相対パスと絶対パス】画像が表示されないトラブルを解決する方法

1. メインループ:URLに応じて自動で用意される「定食」

メインループとは、アクセスしたURL(ページ)に合わせてWordPressが自動的に準備してくれる記事データのこと。何も指定せず「日替わり定食」のように出てくるループです。

メインループを主に使う場所

そのページの「主役」を表示する際は、基本的にメインループを使います。

  • 投稿ページ(single.php:その記事の本文やタイトルを出す時
  • カテゴリー一覧(category.php:そのカテゴリに属する記事を出す時
  • 各種一覧ページ(archive.php / search.php:アーカイブや検索結果を出す時
// メインループの基本形(シンプル!)
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        the_title();
        the_content();
    endwhile;
endif;

2. サブループ:自分で条件を指定して注文する「サイドメニュー」

サブループとは、new WP_Query()を使って、自分が欲しいデータを手動で取ってくるループのこと。メインとは別のものを注文する「サイドメニュー」のような存在です。

サブループを主に使う場所

「ここが自作テーマのこだわりどころ!」という場所では、ほとんどサブループを使うことになります。

  • トップページ(front-page.php / index.php
    「最新のお知らせを3件だけ」「特定のカテゴリを5件」など、独自のレイアウトを組む場合、メインループではなくサブループが必須です。
  • 固定ページ(page.php
    サービス案内などの固定ページの中に、関連する実績一覧やブログ一覧を表示させたい場合によく使います。
  • サイドバーやフッター(sidebar.php 等)
    メインの記事とは別に「人気記事」や「最新記事」を表示させる場合です。
// サブループの基本形
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5
);
$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;

【要注意】サブループ後のリセットを忘れずに!

[Image showing the importance of wp_reset_postdata to prevent layout breakdown in WordPress]

サブループを使ったら、必ず wp_reset_postdata(); で情報をリセットしてください。これを忘れると、その後に続くメインループの表示が崩れたり、サイドバーがバグったりします。

まとめ:使い分けが自作テーマの完成度を決める

最後に、実務での使い分けを一覧表にしました。

種類 使うファイル例 役割
メインループ single.php / category.php / archive.php URLに基づく「主役」の記事表示
サブループ front-page.php / page.php / sidebar.php 特定の条件で出す「追加」の記事表示

特に「トップページと固定ページはサブループが基本」という点を押さえておくだけで、カスタマイズの幅がぐっと広がります。

さらに一歩進むなら
サブループでページネーション(ページ送り)を実装する際は、独自の書き方が必要です。こちらの記事で詳しく解説しています。
▶︎ 【解決】サブループでWP-PageNaviを動かすPHP実装術