ブログ
4.112017
記事の表示を行うためのループ制御の基本~have_posts、the_postと表示関数を学ぼう~
WordPressのテーマをちょっぴりカスタマイズしようとするときに躓いてしまうのが独特なループ制御の記述方法でしょう。
ループの制御は原則としてPHPというWordPressが作られているプログラム言語の記述方法に則って制御します。
プログラムは原則として上から下へと順に処理を行っていきます。このように流れていく途中で、一部を分岐させたり繰り返したり、という制御を行うようになっています。
今回はWordPressの記事を表示する際の基本ループのみに絞って解説します。
基本パターン
まず、記事ループは定石的なものがありますので、以下のコードをコピペして使ってください。
一覧ページの場合(ループを伴う場合)
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> ここに表示部分が入ります。 <?php endwhile; endif; ?>
単体ページの場合(ループを伴わない場合)
<?php if (have_posts()) : the_post(); ?> ここに表示部分が入ります。 <?php endif; ?>
解説
詳細を解説します。
事前に記事を取得するクエリ、たとえばarchiveページやsingleページなどの予めクエリが実行されているものや、query_posts()などで取得クエリが実行されているなどの条件が前提になります。
その上で、データがあるかないかを判断する際に使用するのが「have_posts()」となります。
この have_posts() は、取得したデータがすべてなくなるまで繰り返す while 構文の判定条件としても使用します。
この段階ではまだ実際のデータは表示するための専用関数等で使用できる状態にはなっていませんが、使用できるようにするために「the_post()」を呼び出す形となっています。
the_post() では、複数の記事データのうち、最初の1件を取得してデータの一覧からその1件を削除します。the_post() を繰り返し実行すると、未処理の記事データが先頭から徐々に取り出されていき、最終的にはデータが無くなり、have_posts() の判定が満たされなくなりループが終了するという流れになります。
endforeachやendifなどの使い方については別のコラムでまとめていますのでこちらをご覧ください。
⇒WordPress でよく使われる PHP の条件分岐と反復の命令の記述方法
ループ内の制御
ループ内では、表示したい情報にあわせてそれぞれ適切な関数を指定することで表示できます。
出力したい内容 | 表示関数 | 取得関数 |
---|---|---|
ID | the_ID | get_the_ID |
GUID | the_guid | |
パーマリンク(URL) | the_permalink | get_the_permalink |
タイトル | the_title | get_the_title |
要約 | the_excerpt | get_the_excerpt |
本文 | the_content | get_the_content |
投稿日 | the_date | get_the_date |
投稿時刻 | the_time | get_the_time |
更新日 | the_modified_date | get_the_modified_date |
投稿者名 | the_author | get_the_author |
カテゴリ名(リンク付き) | the_category | get_the_category |
アイキャッチ画像 | the_post_thumbnail | get_the_post_thumbnail |
表示関数は、内部で取得関数と必要なフィルターが適用された状態で出力まで行ってくれるしくみになっています。生データを使用した細かい制御が必要でなければ、まずは表示関数を使用することをおすすめします。
ループ内で使用する関数としてご紹介したものは一部ですが、この部分を掘り下げたり、または表示する内容を表示直前にカスタマイズしたりできるようになると、さらに高度で複雑なサイトを自在に作り出すことができるようになります。
これには、文字列操作はもちろん、日付やHTMLタグの制御など、複雑なものもあります。最初から無理をせず、ひとつずつできるようになっていきましょう。
また今回は紹介していませんが、ループ対象となる記事データそのものを取得する部分については別のコラムでまとめますのでそちらをご覧ください。
Copyright © PLUGMIZE(プラグマイズ)