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

今回はメインループとサブループの違いや使用する場面、できることを説明していきます。
なんとなく使用している人も多いと思いますので
ケース別のループなのかなどきちんとポイントを抑えて使用していきましょう。

目次

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

メインループとは?

Codexにもあるテンプレートのループ記述はこちら

<?php if ( have_posts() ) : ?>
	<?php while ( have_posts() ) : the_post(); ?>
	<!-- なにかの処理 ... -->
	<?php endwhile; ?>
<?php else: ?>
	<!--記事がない場合の処理-->
<?php endif; ?>

使用する場面

  • 記事一覧ページ
  • 記事詳細ページ

投稿記事の一覧ですでにデータベースへ指定する必要がない場合(任意のカテゴリーに属する記事のみなど)
基本的にこちらでループを回してあげましょう。

サブループとは?

データベースにある情報を任意の記事のみをループで回したり
ループする記事内容をカスタマイズできます。
やり方は2通りあります。

使用する場面

  • トップページで投稿を出したい
  • 投稿詳細ページで関連記事、ピックアップ記事を出したい
  • カテゴリー、タグ、投稿者など絞り込みをしたい

get_posts()

<?php
$args = array(
 'posts_per_page' => 5,
 'offset'         => 1,
 'category'       => 1
);
$myposts = get_posts( $args );
foreach ( $myposts as $post ) :
setup_postdata( $post ); ?>
 //ループ内容
<?php endforeach;
wp_reset_postdata();?>

$argsにarray(配列)で任意の情報を変数としていれておきます。
次に$mypostsで投稿情報を登録しておき
foreach構文でそれを繰り返しループしています。

そのほかのループ条件の指定はCodexを参照に

WP Query

<?php
$args = array(
 'post_type'      => 'news', // 投稿タイプスラッグ名
 'posts_per_page' => 10, //表示件数(-1で全ての記事を表示)
 'order'          => 'DESC' //(3, 2, 1)
	);
?>
	<?php
	$my_query = new WP_Query($args);
	if ($my_query->have_posts()) :
		while ($my_query->have_posts()) : $my_query->the_post();
  ?>
//ループ
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else : ?>
	<p>このカテゴリーにはまだ記事がありません</p>
<?php endif;?>

get_post()とほぼ同様です。
メインループでしているif文とwhile文でループを回しています。
僕は基本「WP Query」で実装していますね。

WP Queryのその他の詳細はCodexでご確認ください。

サブループは終了時は「wp_reset_postdata();」を忘れない様に

サブループ使用後は記述を忘れてはいけないのが「wp_reset_postdata();」

仮にお知らせの投稿をサブループでループした後に
グローバル変数の$postや各種投稿情報を変更していますので
リセットして元に戻してあげる必要があります。
セットで記述すると覚えておくといいです。

  • URLをコピーしました!
目次