WordPressの投稿詳細ページで同一カテゴリの投稿を関連記事として表示する
WEB
今回実装したのはWordpressの投稿詳細ページ(singleページ)で、同一カテゴリの投稿を関連記事として表示させることでブログ内の回遊率向上を狙いました。
表示件数を絞る指定することができず、解決に多少時間がかかった。
実装までの手順
- 表示している投稿IDを取得(number型)
- その投稿IDが所属しているカテゴリIDを取得(array型)
- WP_Queryで、singleページに投稿をloopさせ表示する
問題点
posts_per_pageが効かず、投稿の表示件数がどうしても、全件取得となる
結論
posts_per_pageが効かない
このposts_per_pageが非常に厄介だった。
なぜかカテゴリを指定すると指定件数だけで表示が止まらない
※ゆくゆく時間があれば検証したい
PHPでの実装
<?php
$post_id = get_the_ID(); //詳細ページの投稿IDを取得
$categories = get_the_category($post->ID); //投稿IDから、所属しているカテゴリ情報を取得
$category_ID = array(); //カテゴリIDを代入する空配列
// カテゴリ情報をforeachで回す
foreach($categories as $category):
// var_dump($categor);
// array_pushを使用し、作っておいた空配列に、カテゴリIDを代入していく
array_push( $category_ID, $category -> cat_ID);
endforeach ;
// ここからはWP_Queryで条件を指定してloop文を作る
$args = array(
'post__not_in' => array($post -> ID), //ここで現在表示されている投稿を除外する
'post_type' => 'post', //ここは投稿タイプを指定(カスタム投稿でない場合は省略可)
'orderby' => 'post_date', // 日付で並び替え
'posts_per_page' => 6, // こいつが全く機能しない原因
'category__in' => $category_ID, // 表示するカテゴリが配列として指定される
'post_status' => 'publish' // 公開している記事のみが表示される(下書きは表示されない)
);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ) :
?>
<?php
$i = 0; // 初期値
while ( $the_query->have_posts() ) : $the_query->the_post();
if( $i > 5): // 表示件数が絞れないので指定回数でloopを終了するように指定してあげる
break; // loop終了命令
endif;
?>
<!-- ここからHTMLを書く -->
<h1><?php the_title(); ?></h1>
<!-- ここまでHTMLを書く -->
<?php $i++; endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
備考
今回の実装では、singleページというのも影響したのかもしれません。
あくまでも、「posts_per_page」が効かなかった場合には、このような対処方法が使えますという話です。