気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. WordPress
  2. 54 view

WordPressテーマの「while (have_posts()) : the_post();」の意味は?


90分で読める!WordPressテンプレートのifとwhile

プログラミング経験のない方にも理解しやすいように書いた本です。ifやwhileの仕組みから、解読法などをまとめました。ぜひご利用ください。


WordPressテーマを開いてカスタマイズしようとすると、
よく「while (have_posts()) : the_post();」というコード(PHPスクリプト)を見かけます。

以下、解説していきますが、全文を読むのが面倒な方のために意味だけ先に書きます。このコードは、

WordPressデータベースから取り出した投稿・固定ページを1件ずつ表示していく(1ページに10件表示など)

という意味です(あくまでおおざっぱな説明ですが)。

それぞれの命令は、

while → 処理を繰り返す構文
have_posts() → 次の記事があるか調べる
the_post() → 次の記事を取得する

という役割を果たします。

これによって、「次の記事があるか調べてから、次の記事を取得(表示)する」という処理が10回など繰り返される仕組みです。結果として1ページに投稿が10件など表示されることになります。

このコードを「PHP入門書を見て解読しよう!」と思っても、実際は少し難しいかもしれません。

というのは、このWordPressテーマの「while…」は、PHPスクリプト入門者向けの記述とは言えないからです。

ここでは、PHP入門書を片手にカスタマイズしようという方のために、このPHPスクリプトを分解して説明します。

WordPressテーマのwhile文をPHP入門書の書き方に直すと

「while」は処理を繰り返すときに使われるPHPの命令で、「whileに始まりendwhileに終わる」という構造になっています。

つまり、このようなイメージです。

<?php while (have_posts()) : the_post(); ?>
…略…
<?php endwhile; ?>

もう少しわかりやすいように、いわゆるPHP入門書で習うような書き方に書き換えます。

まずは、「have_posts()) : the_post();」の「have_posts()) :」「the_post();」別の主旨のコードなので、わかりやすいように改行します。

また、PHP入門書の書き方に合わせてendwhileの代わりに{と}を使っていますが、処理の主旨は変わりません。

書き直すと次のようになります。

<?php
while (have_posts()) {
the_post();
…略…
}
?>

while文では{ }に記述された部分が繰り返される

while文では、{と}の間に書かれた処理が繰り返されます(WordPressテーマの書き方ではwhileからendwhileの間)。

上の例では、「the_post();、…略…」が繰り返されるということです。

おおざっぱに言えば「1件の記事の表示」を繰り返すということです。

the_post()は1件の記事を取得するWordPress関数(タグ)です。
<?php
while (have_posts()) {
1件の記事を表示する
}
?>
「記事表示の繰り返し」とは、「表示処理」を繰り返す作業のことで、結果として、1件目、2件目、3件目…と、上から順番に1件ずつ表示されます。

while文の( )に記述された条件を満たす間は繰り返される

ここで、記事表示を「いつまで繰り返すのか?」という疑問があります。その条件が書かれているのがwhile文の( )です。上の例では「(have_posts())」と記述してあり、これは、「記事がある間」という意味です。

<?php
while (記事がある間) {
1件の記事の処理
}
?>

この構成を見れば、while文によって、記事がある間、1件の記事が処理(表示)されていくというイメージがわくと思います。その結果、10件や20件の記事が表示されるという仕組みです。

「have_posts()」は「have_posts() == true」のこと

ただ、なぜ「have_posts()」が「記事がある間」なのでしょうか。実は、「have_posts()」は、条件の「== true」が省略された書き方で、「have_posts() == true」ということなのです。

つまり、while文は次のようになります。

while (have_posts() == true) {
…略…
}

このwhile文の(have_posts() == true)を直訳すると、『「まだ次の記事ある?」「はい(true)」の間は…』となります。

WordPressのhave_posts関数は、記事が存在するか調べる関数です。その答えが「はい(true)」のときは、記事の表示を続けるという条件でwhile文が動作しています。

true(とfalse)は「1または0」や「OnまたはOff」のように2択の値を持つ「論理値」とよばれる種類の値です。ピンとこない方は、trueとfalseは「はい」と「いいえ」のことだとイメージしておけば良いでしょう。

「while (have_posts()) : the_post();」に戻ってまとめ

「while (have_posts()) : the_post();」のwhile文には、「記事がある間は、記事の表示処理を続ける」と記述されていることがわかったでしょうか。

もう一度、WordPressテーマのwhile文と入門者向けのwhile文を示します。わからないときは比べてみましょう。

<?php while (have_posts()) : the_post(); ?>
…略…
<?php endwhile; ?>
<?php
while (記事がある間) {
1件の記事の処理
}
?>

入門書の記述と違うためにわかりづらかった方は、この記事を参考にwhile文の仕組みを学習してみてください。

WordPressテンプレートのifとwhileについて、プログラミング未経験の方にもわかりやすくまとめました。ぜひご利用ください。

90分で読める!WordPressテンプレートのifとwhile

▼概要
・ifの仕組み
・テンプレート特有のifの省略記述
・ifの究極の省略形
・“絶対に満たされない条件”の活用
・「コメントをどうぞ」リンクを消す条件
・ifのパターンまとめ
・ifの読み取り方のポイント
・特定のページだけ広告を非表示に
・特定カテゴリの投稿に広告を表示
・投稿の有無で分岐するif
・whileの仕組み
・whileが自動終了するワケ
・投稿一覧の途中で広告を差し込む
・Twenty Twelveの主なifの意味

PHPの基礎を理解したい方におすすめの本

WordPressカスタマイズのため少しずつでもPHPをマスターしていこうという方にはこの本をおすすめします(私が書いた本ですが)。
西沢直木のワードプレス講座の個別サポートに持ち込んでいただければPHPの基礎から詳しく説明します。

「PHPプログラミングの教科書」について詳しくはこちら

WordPressの最近記事

  1. WordPressでいつの間にか作成される「php.suspected」ファイルとは

  2. 検索順位のチェックに役立つツール「GRC」

  3. WordPressのテーマを作成したいならPHPは必修!

  4. 「Notice: Constant HEADER_IMAGE_WIDTH already …

  5. 「Fatal error: Cannot redeclare」と表示されるとき

関連記事

PAGE TOP