テーマの心臓部:メインループの作り方ガイド

外枠(ヘッダー・サイドバー・フッター)が完成したら、いよいよその中身、つまり「記事」を表示させる仕組みが必要です。

WordPressで記事を自動的に取得して表示するこの仕組みを**「メインループ」**と呼びます。これが自作テーマにおける「心臓部」になります。

それでは、**「記事一覧を表示するためのメインループの作り方」**をまとめます。


メインループとは、WordPressのデータベースから「投稿」を探し出し、記事がある分だけ繰り返し表示する処理のことです。これを記述することで、10記事あれば10回、同じレイアウトで記事が並びます。


1. メインループの基本構造(全体像)

もっとも標準的なループの書き方は以下の通りです。これを index.php などのメインコンテンツ部分に記述します。

PHP

<?php if ( have_posts() ) : ?>
    <div class="post-list">
        <?php while ( have_posts() ) : the_post(); ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <a href="<?php the_permalink(); ?>">
                    <div class="post-thumbnail">
                        <?php if ( has_post_thumbnail() ) : ?>
                            <?php the_post_thumbnail( 'medium' ); ?>
                        <?php else : ?>
                            <img src="<?php echo get_template_directory_uri(); ?>/images/no-image.jpg" alt="No Image">
                        <?php endif; ?>
                    </div>

                    <h2 class="post-title"><?php the_title(); ?></h2>

                    <time class="post-date"><?php echo get_the_date(); ?></time>

                    <div class="post-excerpt">
                        <?php the_excerpt(); ?>
                    </div>
                </a>
            </article>
            <?php endwhile; ?>
    </div>
<?php else : ?>
    <p>記事が見つかりませんでした。</p>
<?php endif; ?>

2. ループを制御する重要な4つのコード

このコードの中で、WordPress特有の重要な動きをしているのが以下の部分です。

  • if ( have_posts() ):「表示すべき記事が1件でもあるか?」を確認します。記事がゼロの場合の処理(「記事がありません」という表示)を分岐させるために必要です。
  • while ( have_posts() ):記事がある限り、あとの処理を繰り返します(ループ)。
  • the_post():ここが非常に重要です。 この関数を呼ぶことで、「現在の記事」のデータをセットし、次の記事へと準備を進めます。これを忘れると無限ループ(同じ記事が永遠に表示される)の原因になります。
  • post_class():articleタグなどに、その記事のカテゴリー名やタグ名などをCSSクラスとして自動付与します。

3. ループ内でよく使う「記事情報」の出力

ループの中では、その記事固有の情報を呼び出す「テンプレートタグ」を使います。

関数名役割
the_title()記事のタイトルを表示
the_permalink()記事の詳細ページ(個別ページ)へのURLを表示
the_post_thumbnail()アイキャッチ画像を表示
the_excerpt()記事の抜粋(冒頭の短い文章)を表示
get_the_date()投稿日を取得(echoで表示が必要)

4. すべてを結合した index.php の例

これまでに作成したパーツをすべて組み合わせると、自作テーマの最小構成 index.php はこのようになります。

PHP

<?php get_header(); ?>

<div class="container flex-layout">
    <main class="main-content">
        <h1>最新記事一覧</h1>

        <?php if ( have_posts() ) : ?>
            <?php endif; ?>

        <div class="pagination">
            <?php the_posts_pagination(); ?>
        </div>
    </main>

    <?php get_sidebar(); ?>
</div>

<?php get_footer(); ?>

開発のヒント:the_content()the_excerpt() の使い分け

  • the_content(): 記事の全文を表示します。主に「記事詳細ページ(single.php)」で使用します。
  • the_excerpt(): 記事の冒頭部分だけを抽出します。主に「一覧ページ(index.phparchive.php)」で使用し、スッキリとした見た目にするために使います。

次のステップ:個別記事ページの作成

記事一覧が表示できるようになったら、次は記事をクリックした先の**「記事詳細ページ(single.php)」**を作りましょう。

実は、index.php のループ部分を少し書き換えるだけで、簡単に記事詳細ページも作ることができます。

システム開発なんでもパートナー
システム開発なんでもパートナー

この記事を書いた人