WordPressのテーマ制作では通常のループ「メインループ」だけではできないことをする必要が出てきます。
任意の位置に、任意の件数で任意の記事一覧を出したい。
こんな時はこの「サブループ」が必要になるのです。
サブループとは、WordPressが用意したメインループとは別に、自分で作るループのことです。
前の記事で説明した通り、メインループは WordPress が「今表示すべき記事」を自動で用意してくれます。
一方サブループは、
- 表示したい記事の条件を自分で指定して
- 必要な場所に
- 必要な数だけ表示する
ためのループです。
目次
サブループの基本形(まずはこれだけ)
サブループの最も基本的な書き方は次の形です。
<?php
$args = array(
'posts_per_page' => 3
);
$query = new WP_Query( $args );
?>
<?php if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<!-- ここがループ処理の中身。内部のやり方はメインループと同じ -->
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>初心者のうちは、「こういう形で書くもの」と覚えてしまってOKです。
何をしているコードなのか(超ざっくり)
記事の条件を決める
$args = array(
'posts_per_page' => 3
);ここで「何件表示するか」「どんな記事か」を指定します。
記事を取得する
$query = new WP_Query( $args );指定した条件をもとに、記事データを取得しています。
ループで表示する
<?php if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<!-- ここがループ処理の中身。内部のやり方はメインループと同じ -->
<?php endwhile; ?>
<?php endif; ?>
取得した記事を
1件ずつ表示するためのループです。
後処理(重要)
wp_reset_postdata();サブループが終わったら、必ず元の状態に戻すために書きます。
これはも「とりあえず必須」と覚えてOKです。
表示件数を変えるサンプル
最新記事を3件表示したい場合
$args = array(
'posts_per_page' => 3
);表示件数はposts_per_page で指定します。
カテゴリーを指定するサンプル
特定のカテゴリの記事だけ表示
$args = array(
'category_name' => 'news',
'posts_per_page' => 5
);category_name にはカテゴリースラッグを指定します。
並び順を変えるサンプル
古い記事から表示したい場合
$args = array(
'order' => 'ASC'
);投稿日順にしたい場合
$args = array(
'orderby' => 'date'
);並び順を変えたい場合も、
サブループなら自由に指定できます。
サブループはどこで使われる?
実務では、次のような場所でよく使われます。
- トップページの一部に最新記事一覧
- サイドバーの「おすすめ記事」
- 固定ページ内の記事一覧ブロック
つまり、ページの途中に記事一覧を入れたい時は、ほぼサブループです。
メインループとの違い(最低限)
- メインループ
→ WordPressが自動で用意する - サブループ
→ 条件を指定して自分で作る
置き換えるものではなく、追加するものと考えると分かりやすいです。
よくある初心者のミス
wp_reset_postdata() を書かない
サブループの後に
タイトルや本文がおかしく表示される原因になります。
初心者のうちは、サブループを書いたら必ず resetと覚えておくのが安全です。
まとめ
- サブループは自分で条件を指定する記事一覧
- WP_Query を使うのが基本
- 表示件数・カテゴリ・並び順を自由に制御できる
- 実務ではほぼ必須の知識

コメント