・メインループとサブループとは?
・何が違うの?
こんな疑問にお答えします。
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; ?>
コードの重要な点としてはこちら。
- もし投稿があったら
- 投稿の数分処理をする
順に見ていきましょう。
<?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(); ?>
コードの重要な点としてはこちら。
- $argsにループ処理内容を記述
- WP_Queryの引数に$argsを入れる
- もし$the_queryに当てはまる投稿があったら
- $the_queryに当てはまる投稿の数分処理をする
順に見ていきましょう。
まず$argsという変数に対して、出力したい条件を指定します。
これが特定のループ処理条件の指定ですね。
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
);
今回の例ですと「postという投稿タイプの記事を5つ取得」という指定になります。
続いてWP_Queryの引数に、先ほど条件を指定した変数$argsを入れます。
$the_query = new WP_Query($args);
そしてそれを$the_query変数に格納。
この変数をループ処理することで、指定した処理を表示することができます。
<?php if ($the_query->have_posts()): ?>
<?php endif; wp_reset_postdata(); ?>
ここからはメインループと同じく、もし投稿があったら投稿数処理をするという流れ。
違う点としては「$the_query->」が追加されている点。
そして「wp_reset_postdata();」を記述すること。(後ほど解説します)
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php endwhile; ?>
これもメインループと同じ流れ。
指定した条件通りの数、処理を行います。
<?php endif; wp_reset_postdata(); ?>
サブループを記述する場合、必ず「wp_reset_postdata();」を記述しましょう。
これはループ処理をリセットするという意味です。
リセットしないと、処理内容が書きかわってしまい、上手く取得できない原因となります。
必須で書こう!
【解説】メインループとサブループ|違い【WordPress】:まとめ
- ループ処理にはメインループとサブループがある
- メインループはWordPress側で用意されたループ処理
- サブループは自分で作成できるループ処理
- サブループを使う場合「wp_reset_postdata();」でリセットする必要がある
メインループとサブループの違いを覚えておこう!