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

WordPress WordPress
この記事は約4分で読めます。

※当ブログではアフィリエイト広告を利用しています。

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 if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php endwhile; else: ?>
<p>記事がありません。</p>
<?php endif; ?>

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

<?php
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post(); 

    } // end while
} else {
?>
<p>記事がありません。</p>
<?php
} // end if
?>

「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()」によって、次のデータを取り出してという流れで、最後まで取得・表示させるというわけです。

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

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

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

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

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <p><?php the_content(); ?></p>
<?php endwhile; else: ?>
<p>記事がありません。</p>
<?php endif; ?>

ここでは、以下の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 日本語版

コメント

  1. SAKURA より:

    教えてください。
    メインループは、どこから見られますか?
    初心者です。
    解説宜しくお願い致します。

    • えふめん えふめん より:

      >SAKURAさん
      見られるというのは、ソースコードのことでしょうか?
      でしたら、試用しているテンプレート内のsingle.phpやpage.phpに記述があると思いますよ。(テンプレートによって異なる)
      管理画面から確認するには、外観⇒テーマの編集です。

タイトルとURLをコピーしました