ロッチくん
サブループを使って色々なループを実装したいニャン
前回メインループとサブループについて解説しました。
メインループはWordPressがデフォルトで用意してくれているループであり、テンプレートファイルに応じて決められたループを引っ張ってきてくれるものなので意外と応用がききません。テンプレートファイル外でも様々にループを使いたいことが出てきたときはサブループを使って実装することになります。
サブループを使った応用
関連記事のループを表示
よくブログ投稿などである、その投稿に関連する投稿を一覧で吐き出すループをサブループで実装してみましょう。
コード
<?php
$categories = get_the_category($post->ID); // 現在の投稿のカテゴリーを取得
$category_ID = []; // カテゴリーIDを格納するための空の配列を用意
foreach ($categories as $category) :
array_push($category_ID, $category->cat_ID); // 用意した空配列にカテゴリーIDを格納
endforeach;
$args = [
'post_type' => 'post', // 投稿タイプを指定
'posts_per_page' => '5', // 表示する記事数を指定
'category__in' => $category_ID, // カテゴリーIDを指定
'post__not_in' => [$post->ID], // 現在の投稿を除外
'orderby' => 'rand' // ランダムに表示
];
$related_query = new WP_Query($args);
if ($related_query->have_posts()) :
?>
<?php while ($related_query->have_posts()) : related_query->the_post(); ?>
<!-- ここに関連記事を表示 -->
<?php endwhile; ?>
<?php else : ?>
<p>関連記事はありません。</p>
<?php
endif;
wp_reset_postdata(); ?>
おすすめ記事のループ表示
こちらもまたよくブログ投稿サイトのサイドバーなどで見られるループです。
コード
<?php
$custom_posts = new WP_Query(['tag' => 'pickup']);
if ($custom_posts->have_posts()) :
while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
<!-- おすすめの記事を表示 -->
<?php endwhile; ?>
<?php else : ?>
<p>おすすめの記事はありません。</p>
<?php
endif;
wp_reset_postdata(); ?>
おすすめしたい記事に「pickup」というタグをつけて、「pickup」というタグが付いている投稿のみを抽出してループさせています。
両方とも汎用性が高いループですので是非覚えておきましょう!
コメント