WordPressでオリジナルテーマを作成する際、ループ処理は避けて通れない重要な機能です。
しかし、初めて触れる方にとっては
「なぜこんな書き方をするの?」「どこに書けばいいの?」と疑問だらけではないでしょうか。
この記事では、WordPress初心者の方でも理解できるよう、
ループ処理の基本から実践的な使い方まで、わかりやすく解説していきます。
まだループ処理よくわからないんだよね。おねしゃす。
WordPressのループ処理とは?なぜ必要なのか
WordPressのループ処理とは、データベースに保存された投稿記事を取得して、画面に表示するための仕組みです。
通常のWebサイトでは、HTMLファイルに直接コンテンツを書き込みますが、WordPressはデータベースから動的にコンテンツを取得します。この「取得→表示」を繰り返す処理がループと呼ばれています。
ループ処理が行うこと
- データベースから記事情報を取得
- 取得した記事を1件ずつ順番に処理
- タイトル、本文、日付などの情報を表示
- すべての記事を処理するまで繰り返す
ループ処理を理解することで、
トップページに最新記事一覧を表示する、カテゴリーページを作成する、カスタム投稿タイプを表示するなど、
WordPressの基本的な機能を自由に扱えるようになります。
WordPressループ処理の基本的な書き方
それでは、実際のコードを見ながらループ処理の書き方を学んでいきましょう。
最も基本的なループ処理は以下のような形です。
<?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つの構文スタイルがあります。
// 波括弧スタイル
if (条件) {
処理
}
// コロンスタイル(WordPressでよく使われる)
if (条件) :
処理
endif;PHPWordPressのテーマではコロンスタイルが多く使われます。
理由は、HTMLとPHPが混在するテンプレートファイルで見やすいからです。
どちらを使っても動作は同じですが、
WordPressのコーディング規約ではコロンスタイルが推奨されています。
推奨されてるものに倣(なら)うのがいいね!
よく使うテンプレートタグ一覧
ループ処理の中で使える主要なテンプレートタグをご紹介します。
これらを組み合わせることで、様々な情報を表示できます。
記事情報を取得するタグ
<?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 if (has_post_thumbnail()) : ?>
<?php the_post_thumbnail('medium'); ?>
<?php endif; ?>PHPサムネイル画像のサイズは、thumbnail(小)、medium(中)、large(大)、full(元サイズ)から選べます。
実践的なループ処理の例
以下は、実際のブログでよく見る記事一覧の表示例です。
<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 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
$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カスタムクエリのパラメータ↓
$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
// カスタムクエリのループ
while ($custom_query->have_posts()) : $custom_query->the_post();
// 処理
endwhile;
wp_reset_postdata(); // これを忘れない!
?>PHP忘れてしまうとバグの原因に…!!
まとめ:ループ処理をマスターして自由なサイト構築を
WordPressのループ処理は、最初は複雑に感じるかもしれませんが、基本的な構造はシンプルです。
押さえておくべきポイント
have_posts()で記事があるか確認whileループで記事を1件ずつ処理the_post()で記事データを読み込む- テンプレートタグで情報を出力
endwhileとendifでループを閉じる
この基本形を理解すれば、後は必要なテンプレートタグを追加していくだけです。
まずは簡単なループから始めて、徐々に条件分岐やカスタムクエリにチャレンジしてみてください。
実際に手を動かしてコードを書くことが、ループ処理をマスターする最短の道です。
ぜひ、ご自身のWordPressテーマでループ処理を実装してみてくださいね!
あざした
