フツイッター フェイスブック RSS

WEB作成からカメラ・ガジェット・PC系など雑多なブログ

WEB

WordPressでよく使われるwhileループ処理とサブループについて

2016年1月31日

Pocket

WordPressでよく使われるwhileループ

WordPressで使われるループforeachについては前回で書きましたが、今回はwhileループについて調べてみました。

ちなみにforeachのまとめはこちら。

配列とforeachループの理解を深める
配列とforeachループの理解を深める

WordPressでよく使われるループである「foreach」ですが、今までなんとなくモヤモヤしたまま使っていましたが、ここは基本に立ち返っ...

まずWordPressで記事を出力する基本的な型はこうなります。

基本構文を分解する

まずif( have_post() ):で投稿記事の有無を確認した後にwhlieループに入ります。

have_post()はwhile文にも入ってくるのですが、とりあえず「記事の有無を確認する」とだけ捉えておきましょう。

whileループ

whileループの解釈はシンプルで「括弧内に書いた条件が満たされる場合に処理を進める」というものです。
括弧内に書かれているhave_posts()は前述した通りなので、 while(have_post) = 記事の有無を確認して、あるならばループ処理を行う という意味になります。

そしてさらにthe_post()という謎の関数が出てきました。こちらは「ループ内で引用する投稿データを用意する」という感じです。

まとめるとこんな感じ

while(have_post) : the_post(); = 記事の有無を確認して、あるならばループ内で引用する投稿データを用意してループ処理を行う

こうやって日本語の文章に置き換えればwhileループ処理は理解しやすいんじゃないのでしょうか。

尚、have_posts()とthe_postの解説はコチラ

WordPressのループで使われるhave_posts・$postの役割と$wp_query
WordPressのループで使われるhave_posts・$postの役割と$wp_query

have_posts()関数で行われる処理。関数とは「どこかから値または配列を持ってきて何かしらの処理をする」ものなので、もちろんhave_...

サブループの基本構文

ループにはテンプレートにあわせて出力される部分的なデータの入った$wp_queryを使わないで、サブループという新たに全てのデータの入った$wp_queryから条件分けして格納したもうひとつの変数を使用したループを作ることができます。

「web」のタイトルを10件表示させる例

今回は$my_queryという変数に代入しましたが、代入する変数名は任意のものを使用できます。

if構文とwhile構文に使われているhave_posts()の部分、記事データのthe_post()にも、本来そのページが持っている$wp_queryからじゃなく$my_queryから参照するように指示してあります。
メインループに影響を与えないよう、最後にwp_reset_postdata()で投稿データをリセットすれば完了です。

ほぼ通常のwhileループと同じ書き方なのでラクチンです!
ちなみにpre_get_postsやget_postsを使用したものもあるので興味のある方は調べてみてください。

余談ですが古い書籍などでループの用例で使われていますがquery_posts() は現在非推奨になっていますのでやめたほうがいいでしょう。

まとめ

ということで、今までただの決まり事というだけだったwhileループ処理と用例を「いくらか」紐解いてみました。
wordpressを始めてまず最初に目にするループといっても過言ではない構文ですが、それがどういう意味を持っているのかを知ることは大事なことですし、自分で書いたコードが意図通りに動いた喜びは先に進むきっかけにもなると思いますので、拙い知識と文章ですが是非参考にしてみてください。

この記事に関連する記事

配列とforeachループの理解を深める
配列とforeachループの理解を深める

WordPressでよく使われるループである「foreach」ですが、今までなんとなくモヤモヤしたまま使っていましたが、ここは基本に立ち返っ...

WordPressのループで使われるhave_posts・$postの役割と$wp_query
WordPressのループで使われるhave_posts・$postの役割と$wp_query

have_posts()関数で行われる処理。関数とは「どこかから値または配列を持ってきて何かしらの処理をする」ものなので、もちろんhave_...

Pocket

このカテゴリで良く読まれている記事
関連記事

COMMENT