queryとloopの考え方

WordPressで記事や固定ページを表示する際は、

  1. データを取得する
  2. 取得したデータを表示する

という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の構文の話になり、別の記事で紹介しているので、そちらをご参照ください。