今回はメインループとサブループの違いや使用する場面、できることを説明していきます。
なんとなく使用している人も多いと思いますので
ケース別のループなのかなどきちんとポイントを抑えて使用していきましょう。
目次
メインループとサブループ
メインループとは?
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構文でそれを繰り返しループしています。
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や各種投稿情報を変更していますので
リセットして元に戻してあげる必要があります。
セットで記述すると覚えておくといいです。