【初心者向け】WordPressのループ処理の書き方を徹底解説!基本から実践まで

WordPressでオリジナルテーマを作成する際、ループ処理は避けて通れない重要な機能です。

しかし、初めて触れる方にとっては

「なぜこんな書き方をするの?」「どこに書けばいいの?」と疑問だらけではないでしょうか。

この記事では、WordPress初心者の方でも理解できるよう、

ループ処理の基本から実践的な使い方まで、わかりやすく解説していきます。

まだループ処理よくわからないんだよね。おねしゃす。

目次

WordPressのループ処理とは?なぜ必要なのか

WordPressのループ処理とは、データベースに保存された投稿記事を取得して、画面に表示するための仕組みです。

通常のWebサイトでは、HTMLファイルに直接コンテンツを書き込みますが、WordPressはデータベースから動的にコンテンツを取得します。この「取得→表示」を繰り返す処理がループと呼ばれています

ループ処理が行うこと

  • データベースから記事情報を取得
  • 取得した記事を1件ずつ順番に処理
  • タイトル、本文、日付などの情報を表示
  • すべての記事を処理するまで繰り返す

ループ処理を理解することで、

トップページに最新記事一覧を表示するカテゴリーページを作成するカスタム投稿タイプを表示するなど、

WordPressの基本的な機能を自由に扱えるようになります。

WordPressループ処理の基本的な書き方

それでは、実際のコードを見ながらループ処理の書き方を学んでいきましょう。

最も基本的なループ処理は以下のような形です。

PHP
<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
        <article>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <p><?php the_excerpt(); ?></p>
        </article>
    <?php endwhile; ?>
<?php else : ?>
    <p>記事が見つかりませんでした。</p>
<?php endif; ?>
PHP

このコードは、記事データがあるかどうかを確認し、ある場合はそのリンクやタイトル、本文の抜粋をを表示し、

記事が無い場合は「記事が見つかりませんでした。」と表示する場合のループ処理のコードです。

コードの意味を詳しく説明しますね。

コードの意味を1行ずつ解説

if (have_posts()) : 投稿が存在するかをチェックします。記事がある場合はtrueを返します。

while (have_posts()) : the_post(); 記事がある限りループを続けます。the_post()で次の記事データを読み込みます。

the_permalink() その記事のURLを出力します。リンク先として使用します。

the_title() 記事のタイトルを出力します。

the_excerpt() 記事の抜粋を出力します。本文の最初の部分が自動的に表示されます。

endwhile;endif; whileループとif文の終了を示します。

初心者がつまづくポイント①:コロン構文って何?

PHPには2つの構文スタイルがあります。

PHP
// 波括弧スタイル
if (条件) {
    処理
}

// コロンスタイル(WordPressでよく使われる)
if (条件) :
    処理
endif;
PHP

WordPressのテーマではコロンスタイルが多く使われます。

理由は、HTMLとPHPが混在するテンプレートファイルで見やすいからです。

どちらを使っても動作は同じですが、

WordPressのコーディング規約ではコロンスタイルが推奨されています。

推奨されてるものに倣(なら)うのがいいね!

よく使うテンプレートタグ一覧

ループ処理の中で使える主要なテンプレートタグをご紹介します。

これらを組み合わせることで、様々な情報を表示できます。

記事情報を取得するタグ

PHP
<?php the_title(); ?>           <!-- タイトル -->
<?php the_content(); ?>         <!-- 本文全体 -->
<?php the_excerpt(); ?>         <!-- 抜粋 -->
<?php the_permalink(); ?>       <!-- URL -->
<?php the_time('Y年m月d日'); ?> <!-- 投稿日時 -->
<?php the_category(', '); ?>    <!-- カテゴリー -->
<?php the_tags('タグ: ', ', '); ?> <!-- タグ -->
PHP

サムネイル画像を表示する

PHP
<?php if (has_post_thumbnail()) : ?>
    <?php the_post_thumbnail('medium'); ?>
<?php endif; ?>
PHP

サムネイル画像のサイズは、thumbnail(小)、medium(中)、large(大)、full(元サイズ)から選べます。

実践的なループ処理の例

以下は、実際のブログでよく見る記事一覧の表示例です。

PHP
<div class="post-list">
    <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
            <article class="post-item">
                <?php if (has_post_thumbnail()) : ?>
                    <div class="post-thumbnail">
                        <a href="<?php the_permalink(); ?>">
                            <?php the_post_thumbnail('medium'); ?>
                        </a>
                    </div>
                <?php endif; ?>
                
                <div class="post-content">
                    <h2 class="post-title">
                        <a href="<?php the_permalink(); ?>">
                            <?php the_title(); ?>
                        </a>
                    </h2>
                    
                    <div class="post-meta">
                        <time datetime="<?php echo get_the_date('Y-m-d'); ?>">
                            <?php the_time('Y年m月d日'); ?>
                        </time>
                        <span class="category"><?php the_category(', '); ?></span>
                    </div>
                    
                    <div class="post-excerpt">
                        <?php the_excerpt(); ?>
                    </div>
                    
                    <a href="<?php the_permalink(); ?>" class="read-more">
                        続きを読む
                    </a>
                </div>
            </article>
        <?php endwhile; ?>
    <?php else : ?>
        <p>記事が見つかりませんでした。</p>
    <?php endif; ?>
</div>
PHP

条件分岐を使った応用的なループ処理

ループ処理では、条件分岐タグを組み合わせることで、ページごとに異なる表示を実現できます。

ページの種類によって表示を変える

PHP
<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
        
        <?php if (is_home()) : ?>
            <!-- トップページの場合 -->
            <h2><?php the_title(); ?></h2>
            <?php the_excerpt(); ?>
            
        <?php elseif (is_single()) : ?>
            <!-- 個別記事ページの場合 -->
            <h1><?php the_title(); ?></h1>
            <?php the_content(); ?>
            
        <?php elseif (is_category()) : ?>
            <!-- カテゴリーページの場合 -->
            <h3><?php the_title(); ?></h3>
            <?php the_excerpt(); ?>
            
        <?php endif; ?>
        
    <?php endwhile; ?>
<?php endif; ?>
PHP

初心者がつまづくポイント②:どのファイルに書けばいいの?

WordPressテーマには様々なテンプレートファイルがあり、どこにループを書くべきか迷う方が多いです。

  • index.php – 最も基本的なテンプレート。トップページに使われることが多い
  • single.php – 個別記事ページ用。詳細表示に使う
  • archive.php – アーカイブページ用。カテゴリーや日付別一覧に使う
  • page.php – 固定ページ用。ループを使わないこともある

基本的には、記事一覧を表示したい場所にループ処理を書くと覚えておけばOKです。

カスタムクエリを使った独自のループ処理

標準のループとは別に、独自の条件で記事を取得したい場合はWP_Queryを使います。

WP_Queryとは?
WP_Queryは、WordPressのデータベースから記事を取得するための強力なクラスです。
実は、通常のループ処理も内部的にはこのWP_Queryが使われています。

特定のカテゴリーの記事だけ表示する

PHP
<?php
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'category_name' => 'news'
);
$custom_query = new WP_Query($args);
?>

<?php if ($custom_query->have_posts()) : ?>
    <?php while ($custom_query->have_posts()) : $custom_query->the_post(); ?>
        <article>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <p><?php the_excerpt(); ?></p>
        </article>
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
<?php endif; ?>
PHP

カスタムクエリのパラメータ

PHP
$args = array(
    'post_type' => 'post',           // 投稿タイプ
    'posts_per_page' => 10,          // 表示件数(-1で全件)
    'category_name' => 'news',       // カテゴリースラッグ
    'orderby' => 'date',             // 並び替え基準
    'order' => 'DESC',               // 降順(DESC)か昇順(ASC)
    'meta_key' => 'views',           // カスタムフィールドのキー
    'meta_value' => '100',           // カスタムフィールドの値
);
PHP

標準のループでは、

WordPressが自動的にページの種類(トップページ、カテゴリーページなど)を判断して適切な記事を取得してくれます。

一方、WP_Queryを直接使うことで、

「特定のカテゴリーから5件だけ取得」「人気順に並び替え」「複数の条件を組み合わせて絞り込み」など、

より細かい制御が可能になります。

例えば、サイドバーに「おすすめ記事」や「人気記事」を表示したい場合、

メインループとは別にWP_Queryで独自に記事を取得する必要があります。

このように、1つのページで複数のループを使い分けられるのがWP_Queryの大きな魅力です。

初心者がつまづくポイント③:wp_reset_postdata()を忘れずに!

カスタムクエリを使った後は、必ずwp_reset_postdata()を実行してください。

これを忘れると、その後の標準ループに影響が出て、意図しない記事が表示されてしまいます。

PHP
<?php 
// カスタムクエリのループ
while ($custom_query->have_posts()) : $custom_query->the_post();
    // 処理
endwhile;
wp_reset_postdata(); // これを忘れない!
?>
PHP

忘れてしまうとバグの原因に…!!

まとめ:ループ処理をマスターして自由なサイト構築を

WordPressのループ処理は、最初は複雑に感じるかもしれませんが、基本的な構造はシンプルです。

押さえておくべきポイント

  • have_posts()で記事があるか確認
  • whileループで記事を1件ずつ処理
  • the_post()で記事データを読み込む
  • テンプレートタグで情報を出力
  • endwhileendifでループを閉じる

この基本形を理解すれば、後は必要なテンプレートタグを追加していくだけです。

まずは簡単なループから始めて、徐々に条件分岐やカスタムクエリにチャレンジしてみてください。

実際に手を動かしてコードを書くことが、ループ処理をマスターする最短の道です。

ぜひ、ご自身のWordPressテーマでループ処理を実装してみてくださいね!

あざした

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次