WordPressのクエリーループの使い方を徹底解説!コード例と仕組み

PR

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

WordPress クエリーループとは?

WordPressのクエリーループ(The Loop、または単にループ)とは、WordPressのデータベースから投稿(記事、ページ、カスタム投稿タイプなど)を取得し、それぞれの投稿の情報を表示するためのPHPコードブロックのことです。簡単に言えば、「データベースから投稿のリストを取得し、そのリストの各項目(投稿)を順番に表示するための仕組み」です。

WordPressのテーマファイル(index.phparchive.phpsingle.phpなど)には必ずこのループが含まれており、これによってサイトのコンテンツが動的に生成・表示されます。

ループの基本的な流れと仕組み

ループは通常、以下のようなPHPの制御構造(whileループ)で構成されます。

  1. 投稿があるかどうかのチェック (have_posts()): まず、WordPressが現在のクエリに基づいて表示すべき投稿があるかどうかをチェックします。
  2. 投稿のセットアップ (the_post()): もし投稿があれば、次の投稿をグローバル変数にセットアップします。これにより、その投稿のタイトル、内容、日付などの情報にアクセスできるようになります。
  3. 投稿情報の表示: セットアップされた投稿の情報を、テンプレートタグ(例: the_title()the_content()the_permalink()など)を使って表示します。
  4. 次の投稿へ: すべての投稿が表示されるまで、2と3のステップを繰り返します。

ループの基本的なコード例

最も基本的なループのコードは以下のようになります。

<?php
if ( have_posts() ) : // 投稿があるかチェック
    while ( have_posts() ) : // 投稿がある限りループ
        the_post(); // 次の投稿をセットアップ
        ?>
        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
            <p class="post-meta">
                投稿日: <?php the_time( 'Y年n月j日' ); ?>
                カテゴリー: <?php the_category( ', ' ); ?>
            </p>
        </div>
        <?php
    endwhile;
else : // 投稿がない場合
    ?>
    <p>投稿が見つかりませんでした。</p>
    <?php
endif;
?>Code language: JavaScript (javascript)

なぜクエリーループが重要なのか?

  • 動的なコンテンツ生成: データベースに保存された投稿を自動的に読み込み、ウェブページに表示することを可能にします。これにより、サイト管理者は投稿を追加・編集するだけで、ウェブサイトのコンテンツが自動的に更新されます。
  • 多様な表示: ホームページ、アーカイブページ(カテゴリ別、タグ別、日付別など)、単一記事ページなど、様々な種類のページで異なる投稿のリストや単一の投稿を表示するために使用されます。
  • テーマの柔軟性: テーマ開発者は、ループ内で様々なテンプレートタグや条件分岐を使用することで、投稿の表示方法を細かく制御できます。

メインクエリとセカンダリクエリ

WordPressには、主に2種類のクエリがあります。

  1. メインクエリ (Main Query): これはWordPressがURLに基づいて自動的に生成するクエリです。例えば、example.com/category/news/にアクセスすると、WordPressは「news」カテゴリの投稿を自動的に取得するメインクエリを実行します。通常、テーマファイル内でnew WP_Query()などを使わずにhave_posts()the_post()を使用する場合、このメインクエリが対象となります。
  2. セカンダリクエリ (Secondary Query) / カスタムクエリ (Custom Query): メインクエリとは別に、特定の目的のために独自のクエリを実行したい場合にWP_Queryクラスを使用します。例えば、サイドバーに特定のカテゴリの最新記事を表示したり、関連記事を表示したりする場合に利用します。カスタムクエリの例:
<?php
// カスタムクエリを作成
$args = array(
    'post_type'      => 'post', // 投稿タイプ
    'posts_per_page' => 5,      // 表示する投稿数
    'category_name'  => 'column', // 特定のカテゴリ
);
$custom_query = new WP_Query( $args );

// カスタムクエリのループ
if ( $custom_query->have_posts() ) :
    while ( $custom_query->have_posts() ) : $custom_query->the_post();
        // 投稿情報を表示
        ?>
        <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <?php
    endwhile;
    wp_reset_postdata(); // 重要な処理!メインクエリの情報を元に戻す
else :
    // 投稿が見つからない場合
    echo 'コラムは見つかりませんでした。';
endif;
?>Code language: HTML, XML (xml)
  1. wp_reset_postdata()の重要性: カスタムクエリを使用した後は、必ずwp_reset_postdata()を呼び出す必要があります。これは、the_post()が変更したグローバルな投稿データを、メインクエリのデータに戻すために重要です。これを行わないと、その後のメインループや他の部分で予期しない動作を引き起こす可能性があります。

まとめ

WordPressのクエリーループは、WordPressの強力なコンテンツ管理システムの中核をなす部分です。これによって、データベースに格納された情報を柔軟かつ効率的にウェブページに表示することができます。テーマ開発においては、このループの仕組みを理解することが不可欠です。

WordPressテーマのクエリーループ比較

2026年現在のWordPress開発において、「クエリーループ(Query Loop)」の強力さは、サイト制作の自由度を左右する決定的な要素です。

クエリーループの機能性、拡張性、そして公式のブロックエディタへの最適化具合から見て、「強力な2選」を絞り込むと以下のようになります。

1位:AFFINGER6(アフィンガー)

圧倒的なカスタマイズ性と、専用ブロックによる「絞り込み」の強さが群を抜いています。

  • クエリ機能の強み: AFFINGERは独自開発の「AFFINGERタグ管理マネージャー」や専用の「記事一覧ブロック」が非常に強力です。標準のクエリーループブロックを拡張するだけでなく、カテゴリ、タグ、投稿タイプを組み合わせた複雑な抽出条件を、コードを書かずに直感的に設定できます。
  • デザインの柔軟性: 抽出した記事のレイアウト(カード型、リスト型、スライド型)を個別に細かく設定できるため、ポータルサイトのような複雑なトップページを作る際に最も重宝します。

2位:THE THOR(ザ・トール)

「スマート検索」機能に代表される、データベースとしての運用能力の高さが特徴です。

  • クエリ機能の強み: THE THORは「絞り込み検索機能」が標準搭載されているほど、データの抽出(クエリ)に強い設計になっています。アーカイブページや記事一覧において、ユーザーが求める情報を瞬時に引き出すための内部処理が最適化されています。
  • 運用効率: クエリーループの設定項目がUIに統合されており、複雑な条件分岐をテンプレートとして保存しやすいため、大規模なメディア運営に向いています。