以下のソースコードはWordPressの基本の「ループ」です。
テンプレートタグやPHPの基礎知識が無くてもこの通りに書いておけば表示される、と、いわゆる「おまじない」的な使われ方をされている事が多いので、改めて裏側でどのような処理が行われているのか仕組みを理解していきましょう。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php endwhile; else : ?>
<?php endif; ?>
コードを読みやすくするため、一旦このように改行します。
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
endwhile;
else :
endif;
?>
if文(PHP制御構文)
プログラムは上から記述した順に処理が行われます。まずは1行目の「if ( have_posts() ) :」から見ていきましょう。
if文は条件式に書かれた内容を見て、条件が成立すれば真(true)、成立しなければ偽(false)という値を返します。またelseifを追記することで条件を分けて処理を行うことが可能です。
if ( 条件式1 ) :
// 条件式1が成立した時(true)に実行される処理
elseif ( 条件式2 ):
// 条件式2が成立した時(true)に実行される処理
else :
// 条件式が成立しない時(false)に実行される処理
endif;
今回は「have_posts()」が条件となっています。
WordPressの裏側では、接続しているデータベースへ問い合わせを行い、保存されている投稿データを自動的に取得しています。これを「クエリを発行する」と言います。
そのクエリによって取得した投稿データの中に、ループできるものがあるかどうかチェックするのがhave_postsの役割です。
if ( have_posts() ) :
// WordPressにループできる投稿データがある場合の処理
else :
// WordPressにループできる投稿データが無い場合の処理
endif; // if文終了の宣言
while文(PHP制御構文)
次に2行目の「while ( have_posts() ) :」を見ていきましょう。
PHPのwhile文は条件式が真の場合、入れ子になっている処理を繰り返し実行します。
今回の場合、「have_posts()」が条件となっているので「ループできる投稿データの数だけ処理を繰り返し行う」と解釈することができます。
while ( 条件式 ) :
// 条件式が成立したとき繰り返し実行される処理
endwhile; // while文終了の宣言
the post(WordPress関数)
投稿データを$postというグローバル変数に格納します。
$postの中身はタイトルや本文など、その投稿に関する様々な情報が入っています。
これらを踏まえて、以下のソースコードを読んでみましょう。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php the_title(); ?>
<?php endwhile; else : ?>
<?php endif; ?>
- WordPressが自動的にデータベースから投稿データを取得。
- その中でループ出来る投稿データがあれば、それらを変数$postに格納。
- 上記の変数$postから、タイトルの情報だけを取り出して画面に表示する。(「the_title」によって行われる処理)
つまり「投稿記事の数だけその記事のタイトルを表示させる」となります。
ちなみに…
今回のWordPressメインループでは、if文、while文ともにコロン構文で記述されています。