【移転しました】YQUAL BLOG -ワイコールブログ-

プログラマーのきままなブログです。学習方法やフリーランスで生き抜いていく方法を発信していきます。

WordPressで使うループ文

最近ではブログを開設する際にWordPressを使用することも多くなった。
自由にカスタムができるという点がWordPressの魅力だろう。

ということで、良く用いられるループ文について

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

    <h1><?php the_title(); ?></h1>
    <div><?php the_content(); ?></div>
    
    <?php
 }

} else {

}
 ?>

一般的なループです。
カスタムクエリを使用する場合はまた別のループ方法が使用されますが、まずは単純なループから学んでみましょう。

まずこのループ文を書く場所ですが、page.phpやsingle.phpで用いられます。
※カスタム投稿タイプを使用している場合は、page-***.phpやsingle-***.phpですね

この辺はざっくり説明です。
完全初心者のひとやテンプレートのどのファイルがどの部分に反映されているかが知りたい人はコメントでご質問ください。


まず2行目
if文でhave_posts()という関数を使用します。

関数リファレンス/have posts - WordPress Codex 日本語版

これで、現在開いているページに投稿が存在しているかをチェックします。
もし投稿があれば「true」が返ってくるので、次のカッコ内のプログラムが実行されます。
記事が存在しない場合は「false」が返るので、15行目のelse以降のカッコ内プログラムが実行されます。

では3行目のwhile ( have_posts() )は何をしているのでしょうか?

ここでは繰り返し処理を行っています。
have_posts()は正確には「次の投稿があるかどうか」でtrueかfalseを返しています。
なので、ifで投稿がある場合はまずtrueが返ります。
繰り返し処理のため、最初にtrueが返ってきた後、次の投稿があるかどうかを返答してくれます。
通常のページであれば、記事は1件なのでfalseが返りますが、アーカイブページの一覧を作成する際にこの関数を使用して入れば、記事がある限りtrueを返して、なくなればfalseを返します。

少し難易度が高い一行です。
正直、わからない場合はおまじない程度に考えておいても良いですね。

さあ、次の行にあるthe_post()が投稿データを取得します。
投稿データを取得したおかげで、9行目と10行目で投稿内容を出力ができるようになりました。

the_title()はそのままです。
タイトルを出力してくれます。
the_content()は記事の内容を出力してくれます。
タイトル、記事のデザインを変えたい場合は、この前後のタグを変更したり、クラスを追加したりしてカスタムします。


ちなみに、通常のシングルページではelse以降は必要ない場合が多いです。
アーカイブページ等であれば、記事が0件の場合に「記事が存在しません」等の一文を表示させることが多いです。


というWordPressのカスタム基本についてのお話でした。。。