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($post -> ID)で、現在の記事のカテゴリーの情報を取得して、次の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を使ったループで記事を一覧表示させています。

もしも同じカテゴリーの記事がなかった場合は、「関連記事はありませんでした。」と表示されます。

関連記事
WordPressのテンプレートで404エラーページを作成する
WordPressのテンプレートで404エラーページを作成する
WordPressのURLを変更する方法
WordPressのURLを変更する方法
WordPressでタグクラウドを設置する方法
WordPressでタグクラウドを設置する方法