時給単価UP【3大特典付き】
コーディングテクニック集100選⋙

【解説】メインループとサブループ|違い【WordPress】

記事内に広告を含みます

パソ君
パソ君

・メインループとサブループとは?
・何が違うの?

こんな疑問にお答えします。

WordPressにて記事の内容を出力するときに、ループ処理を使って表示しますよね。

そのループには2種類あり、メインループとサブループがあります。

それぞれ記述方法が異なり、特徴も違います。

どんな時にどのループを使うのか、どうやって記述するのか覚えておくべし!

ジト
ジト

簡単に覚えれるよ!

ということで、この記事では「メインループとサブループ」について解説していきます!

この記事でわかること

・メインループの特徴と記述方法
・サブループの特徴と記述方法
・メインループとサブループの違い

【解説】メインループとサブループ|違い【WordPress】

WordPressのループ処理には、2種類あります。

  • メインループ
  • サブループ

簡単に詳細を見ていきましょう。

メインループとは

メインループとは、WordPress側で用意されたループ処理のこと。

テーマのインデックスページやアーカイブページなど、サイト全体のコンテンツを表示するために使用されます。

1テンプレート内で、1回のみ使用可能。

ちなみに表示件数は、管理画面で設定された数分が表示されるのが特徴です。

デフォルトのままだと、10件ですね。

この設定は全体に対してかかるため、「特定部分だけ記事数を3つに」というのは厳しいです。

サブループとは

サブループは、自分で作成できるループ処理のこと。

特定の投稿やページに関連するコンテンツを表示する時に使うのが特徴です。

1テンプレート内で、複数使用できます。

カスタムタクソノミーの記事を表示したり、記事数の条件を自分好みに変えたりすることが可能。

メインループとサブループの違い

メインループサブループ
WordPress側で用意自分で作成
部分的な条件変更不可部分的に条件変更可能
1テンプレート内で
1回のみ使用可能
1テンプレート内で
複数使用可能

【解説】メインループ処理の記述方法【WordPress】

メインループの記述方法はこちら。

<?php if ( have_posts() ) : ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php endif; ?>

省略して記述するとこうなります↓

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <!-- 処理内容 -->
<?php endwhile; endif; ?>

投稿内容がない時の処理も記述するとこうなります↓

<?php if ( have_posts() ) : ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php else: ?>
  <!-- 投稿データがない時の処理内容 -->
<?php endif; ?>

メインループ処理記述の意味

コードの重要な点としてはこちら。

  1. もし投稿があったら
  2. 投稿の数分処理をする

順に見ていきましょう。

➀:もし投稿があったら

<?php if ( have_posts() ) : ?>

<?php endif; ?>

このifとendifで囲まれた部分が「もし投稿があったら」という意味。

投稿があれば、下のコード処理へと移ります。

➁:投稿の数分処理をする

<?php while(have_posts()): the_post(); ?>
  <!-- 処理内容 -->
<?php endwhile; ?>

このwhileとendwhileで囲まれた部分が「投稿がある数だけ処理を行う」という意味。

つまり投稿記事が5つあれば、5つのデータ処理が行われます。

【解説】サブループ処理の記述方法【WordPress】

サブループ処理の基本的な記述方法がこちら。

<?php
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
  );
  $the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()): ?>
  <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>

投稿内容がない時の処理も記述するとこうなります↓

<?php
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
  );
  $the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()): ?>
  <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <!-- 処理内容 -->
  <?php endwhile; ?>
<?php else: ?>
  <!-- 投稿データがない時の処理内容 -->
<?php endif; wp_reset_postdata(); ?>

サブループ処理記述の意味

コードの重要な点としてはこちら。

  1. $argsにループ処理内容を記述
  2. WP_Queryの引数に$argsを入れる
  3. もし$the_queryに当てはまる投稿があったら
  4. $the_queryに当てはまる投稿の数分処理をする

順に見ていきましょう。

➀:$argsにループ処理内容を記述

まず$argsという変数に対して、出力したい条件を指定します。

これが特定のループ処理条件の指定ですね。

$args = array(
  'post_type' => 'post',
  'posts_per_page' => 5,
);

今回の例ですと「postという投稿タイプの記事を5つ取得」という指定になります。

➁:WP_Queryの引数に$argsを入れる

続いてWP_Queryの引数に、先ほど条件を指定した変数$argsを入れます。

$the_query = new WP_Query($args);

そしてそれを$the_query変数に格納。

この変数をループ処理することで、指定した処理を表示することができます。

➂:もし$the_queryに当てはまる投稿があったら

<?php if ($the_query->have_posts()): ?>

<?php endif; wp_reset_postdata(); ?>

ここからはメインループと同じく、もし投稿があったら投稿数処理をするという流れ。

違う点としては「$the_query->」が追加されている点。

そして「wp_reset_postdata();」を記述すること。(後ほど解説します)

➃:$the_queryに当てはまる投稿の数分処理をする

<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>

<?php endwhile; ?>

これもメインループと同じ流れ。
指定した条件通りの数、処理を行います。

「wp_reset_postdata();」を記述しよう

<?php endif; wp_reset_postdata(); ?>

サブループを記述する場合、必ず「wp_reset_postdata();」を記述しましょう。

これはループ処理をリセットするという意味です。

リセットしないと、処理内容が書きかわってしまい、上手く取得できない原因となります。

ジト
ジト

必須で書こう!

【解説】メインループとサブループ|違い【WordPress】:まとめ

  • ループ処理にはメインループとサブループがある
  • メインループはWordPress側で用意されたループ処理
  • サブループは自分で作成できるループ処理
  • サブループを使う場合「wp_reset_postdata();」でリセットする必要がある
ジト
ジト

メインループとサブループの違いを覚えておこう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA