WordPressで記事や固定ページを表示する際は、
- データを取得する
- 取得したデータを表示する
という2つの工程で処理が行われています。
この「取得」を担当するのが Query、
「表示」を担当するのが Loop です。
queryとは
Query(クエリ)とは、WordPressのデータベースから必要な情報を取得する処理のことです。例えば、
- 最新の記事を3件取得する
- 特定のカテゴリの記事を取得する
- 検索キーワードに一致する記事を取得する
といった処理がQueryにあたります。
自作クエリの例は以下の通りです。
$args = array(
‘posts_per_page’ => 3
);
$query = new WP_Query($args);
このコードでは、投稿を3件取得しています。
posts_per_page は取得件数を指定するパラメータです。
内部的にはデータベースへ問い合わせを行っており、イメージとしては次のようなSQLに近い動きをしています。
SELECT *FROM postsLIMIT 3
つまり、Queryの本質は
「条件を指定してデータを取得すること」
になります。
Loopとは
Loop(ループ)は、Queryで取得したデータを順番に表示する仕組みです。
例えば取得した3件の記事のタイトルを表示する場合は、次のように記述します。
while ( $query->have_posts() ) :
$query->the_post();
the_title();
endwhile;
while を使って、取得した投稿を1件ずつ処理しています。
- 1件目のタイトルを表示
- 2件目のタイトルを表示
- 3件目のタイトルを表示
という流れで実行されます。
ワードプレスの標準のqueryとloop
実はWordPressでは、ページを表示する時点で既に投稿データが取得されています。
そのため、多くのテンプレートファイルでは自分で WP_Queryを書かなくてもLoopだけで表示できます。
初期値として、wp_queryに記事の内容が取得されているので、自分でwp_queryを書く必要はありません。また、$wp_query->have_posts()という処理も、ワードプレスのWordPressのコアファイル内で、
function have_posts() {
global $wp_query;
return $wp_query->have_posts();
}
というイメージの処理が定義されているので、have_posts()という記述のみで呼び出すことができます。
最小構成のLoopは以下の通りです。
<?php
while ( have_posts() ) :
the_post();
the_title();
endwhile;
?>
ループのwhile文などの書式はPHPの構文の話になり、別の記事で紹介しているので、そちらをご参照ください。

