WordPressの「ループ」とは、複数の投稿を連続して表示させたいときなどに使われるPHPコードです。ループを使うことで、現在のページに表示される各投稿を処理したり、指定した条件に従って投稿の形式を整えたりすることができるようになります。
例えば、ブログ形式のサイトなどで「トップページに最新の投稿記事を5件表示する」というときなどにループ処理が必要になってきます。また、テンプレートやプラグインの説明に「このタグ(プラグイン)はループ内で使用します。」と記載がある場合、タグが各投稿で繰り返して表示されます。
各投稿にデフォルトで含まれるテンプレートタグには以下のようなものがあります。
- the_title()…投稿のタイトル
- the_time()…投稿の公開日時
- the_category()…カテゴリー属性
さらには、それ以外のテンプレートタグを使用するとより細やかな表示設定が可能になりますので、カスタマイズする際はタグを調べて記述していきます。
ループって何?
一般的なブログ形式のサイトでは、トップページに複数の記事を投稿順に表示することが多いですが、こうした「投稿記事を表示する」という同じ処理作業を繰り返しする記述を「ループ」といいます。
基本的なループ構文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php if (have_posts()) : ?> //投稿記事があれば出力する <?php while (have_posts()) :the_post(); ?> //投稿がある間繰り返す <?php endwhile; ?> //繰り返しが終わった後に出力 <?php else : ?> //投稿記事が無い場合 <p>投稿記事が見つかりませんでした。</p> <?php endif; ?> |
ループは「if~else文」で囲みます。
if~else文 を解説すると「もし○○であれば、Aの処理を実行する、そうでなければBの処理を実行する」という意味になります。
have_posts()関数
if(have_posts()) は、投稿記事があるかないかを調べています。もし記事がある場合次のwhile処理に移ります。
the_post()関数
投稿リストの中の現在の投稿を取得し、それをループ内で使用できるようにしています。この、the_post()関数がないとほとんどのテンプレートタグは正しく機能しません。
while(have_posts()) : the_post(); ~ endwhile;
while(have_posts()) : the_post(); と endwhile; との間に処理内容を記述することで、()内の条件が真である場合(投稿記事がある場合)は「投稿記事を表示する」という処理が繰り返されます。
else :
else : の後に処理内容を記述すると、もし投稿記事がない場合に表示させる内容を指定できます。
endif;
endif; と記述することで、ループが終了します。
基本的なループ構文なので覚えておきましょう。
上記を短縮して下記のようにまとめて記述することもできます。
1 2 3 |
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> //ここに繰り返したい処理内容を記述 <?php endwhile; endif; ?> |
また、PHPの制御構造を用いることで、下記のように書くこともできます。
1 2 3 4 5 6 7 8 9 10 |
<?php if (have_posts()) { while (have_post()){ the_post(); // // ここに繰り返したい処理内容を記述 // } // endwhile } //endif ?> |
「投稿記事があれば~を表示し、なければ何も表示しない」という記述内容になります。