WordPressで記事内に同じカテゴリーの記事一覧を表示する方法
WordPressの記事内に、その記事と同じカテゴリーの記事一覧を表示する方法の備忘録です。
同じカテゴリーの記事を取得する
まず初めに、現在表示している記事のカテゴリーIDを取得します。取得したカテゴリーIDと同じカテゴリーの記事を、一覧表示するための配列に追加します。
WordPressの記事を表示しているファイル(single.phpなど)の、記事一覧を表示させたい箇所に下記スクリプトを追加します。
<?php
$categories = get_the_category();
$category_ID = array();
foreach($categories as $category):
array_push( $category_ID, $category -> cat_ID);
endforeach ;
$args = array(
'post__not_in' => array($post -> ID),
'posts_per_page'=> 3,
'category__in' => $category_ID,
'orderby' => 'rand',
);
$query = new WP_Query($args);
?>
1行目のget_the_category()
で、現在の記事のカテゴリーの情報を取得して、次のforeach
でカテゴリーIDのみを取得しています。
$args
では、取得したカテゴリーIDに加え、表示件数などの設定をしています。次のnew WP_Query()
で、配列の設定をもとに該当する記事情報を取得します。
今回設定した項目の詳細は下記の通りです。
- post__not_in ⇨ 現在の記事を除く
- posts_per_page ⇨ 取得件数(今回は3件)
- category__in ⇨ 該当のカテゴリーID
- orderby ⇨ 取得順(ランダム)
posts_per_page
の値で、一覧表示する記事の件数を変更できます。
記事を一覧表示する
取得した記事情報を一覧表示します。表示する方法はトップページなどの記事一覧と同様です。
上記のコードのすぐ下に、下記を追記します。
<?php if( $query -> have_posts() ): while ($query -> have_posts()): $query -> the_post(); ?>
<a href="<?php the_permalink() ?>">
<div><?php the_title(); ?></div>
</a>
<?php endwhile; else:?>
<p>関連記事はありませんでした。</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
if( $query -> have_posts() )
で同じカテゴリーの記事が存在した場合に、while
を使ったループで記事を一覧表示させています。
もしも同じカテゴリーの記事がなかった場合は、「関連記事はありませんでした。」と表示されます。
同じタグの記事を一覧表示する方法もこちらでまとめています。