WPlogs

WordPressを中心にWeb関連の情報発信。PHP、CakePHP、HTML5、SEOなど。 ※旧名称「SEO人」、旧URL「http://seo.net-luck.com/」

*

WordPressのメインループの仕組みをざっくりと理解する

      2015/06/02

WordPress

出典:http://www.flickr.com/photos/oakleyfamily/4919659112/

WordPressテーマを眺めていると、どのテーマにも「if ( have_posts() ) : while ( have_posts() ) : the_post();」~「endwhile;」という記述があります。

これは、WordPressの「メインループ」と言われるものです。

その仕組みを少し調べて、ざっくりと理解してみます。

なお、今回のバージョンは以下です。

  • WordPress 4.2.2

スポンサード リンク

WordPressの仕組み

WordPressは、以下のようにリクエストされたURLによって、どのデータ・ページを表示するのかを判断します。

※パーマリンク設定「デフォルト」の場合

  • 「http://test.com/」…トップページ
  • 「http://test.com/?cat=1」…カテゴリーID「1」
  • 「http://test.com/?p=2」…ID「2」の投稿
  • 「http://text.com/?page_id=3」…ID「3」の固定ページ

そして、それぞれURLへのリクエストによって取得されるデータを「メインクエリ」(WordPressクエリ)と呼びます。

取得したデータは、「$wp_query」オブジェクトに保存されます。

メインループ

「$wp_query」オブジェクトに保存されたデータを取得・表示するためのループが、「メインループ」です。

メインループの構文

メインループの構文は、以下のようになります。

「:」を使用しないPHP構文で記述した場合は、以下のようになります。

「have_posts」、「the_post」

このメインループで出てくるものは、以下の2つ。

  • 「have_posts」…「$wp_query」に表示させるデータがあるかチェック
  • 「the_post」…「$wp_query」から順にデータを取り出して「$post」へ格納し、次のデータへと進める

まず始めのif文の条件「have_posts()」で、「$wp_query」に表示させるデータがあるかチェックし、次のwhile文の繰り返し条件に「have_posts()」を使用することで、表示させるデータがある場合はループし続けます。

次に、ループの先頭で「the_post()」によって、「$wp_query」からデータを1件取り出して「$post」へ格納し、「$wp_query」のデータを次へと進めます。

後は繰り返しで、再びループの先頭で「the_post()」によって、次のデータを取り出してという流れで、最後まで取得・表示させるというわけです。

なるほど、それでこのような記述になるわけですね。

メインループの中で使用するテンプレートタグ

メインループの説明は上記の通りで、取得したデータのタイトルや内容を表示したければ、そのメインループの中に出力させる処理を書けばいいんですね。

例えば、タイトルや内容を出力するなら、このような感じです。

ここでは、以下の2つを使用しました。

  • 「the_title」…現在の投稿のタイトルの表示
  • 「the_content」…現在の投稿の本文を表示

これら2つは、メインループの中での使用が前提となっているテンプレートタグです。

他にも、多くのテンプレートタグがあり、以下は代表的なものです。

  • 「the_date」…現在の投稿の投稿/更新日を表示
  • 「the_permalink」…現在の投稿のパーマリンクのURLを表示
  • 「the_author」…現在の投稿の作成者名を表示
  • 「the_category」…現在の投稿が属するカテゴリーへのリンクを表示
  • 「the_tags」…現在の投稿に付けられたタグへのリンクを表示
  • 「the_excerpt」…現在の投稿の抜粋を、文末に[…]をつけて表示

メインループの中で使用するかどうかを判断するには、WordPress Codexを参照しましょう。

説明の中に「このタグはループ内でのみ使えます。」といった記載があります。

これらのテンプレートタグは、メインループの外では思ったとおりの結果が得られない可能性があります。

なので、WordPressテーマファイルを修正・作成する場合は、その箇所がメインループの中なのかどうか、テンプレートタグを調べる場合は、メインループの中で使用するのかどうかを意識しておきましょう。

WordPressのメインループについては、以上です。

WordPressの理解が少し深まりました。

参考サイト

ループ – WordPress Codex 日本語版
テンプレートタグ – WordPress Codex 日本語版

 - WordPress全般