検索して出てきた方法を使ったら複数のカテゴリーに属しているときはうまく動くけど、一つのカテゴリーにしか属していないときにはうまく動かない、というかエラー吐いたりして困ったので頑張ってみた。
条件
- single.php
- 投稿記事の下に「同じカテゴリーのその他の記事」を一覧表示させたい
- ただし、投稿記事はその一覧から省く
- 現在の投稿記事が複数のカテゴリーに属しているときは、それらを全てひっくるめて表示すること
- 扱いやすいnew WP_Query を使いたい
コード
<?php $post_id = get_the_ID(); $cat_ = get_the_category() ; $a = $cat_[1]; if (empty($a)) : $cat_ids = $cat_[0] -> term_id; else : foreach ($cat_ as $cat_id): $cat_ids .= $cat_id -> term_id.","; endforeach; endif ; $rel_posts = new WP_Query (array( 'showposts' => 6, 'post__not_in' => array($post_id), 'cat' => $cat_ids )); ?> <?php if( $rel_posts -> have_posts() ) : ?> <?php while ( $rel_posts -> have_posts() ) : $rel_posts -> the_post(); ?> 表示処理 <?php endwhile; ?> <?php endif; ?> <?php wp_reset_postdata() ?>
解説
$post_id = get_the_ID();
現在の投稿のIDを取得。あとでWP_Queryから現在の投稿を外すために使用する。
$cat_ = get_the_category() ;
現在の投稿のカテゴリに関する情報を取得。$catは使うのがはばかられたので(予約語にcatってあるし・・・)アンダースコアをつけてます。
$a = $cat_[1];
現在の記事にカテゴリーが複数割り当てられているかどうかを判別するために使用。邪道っぽいやり方ですが。
このあとで if (empty($a)) : というかたちで、$aにデータがなければ、所属するカテゴリーは1つだけ、というやり方。
クエリ発行
これで必要な変数、IDを、条件ごとに取得できたので、あとはいつもどおりWP_Queryを使う。
$rel_posts = new WP_Query (array(
'showposts' => 6,
'post__not_in' => array($post_id),
'cat' => $cat_ids
));
showposts で出力する記事数を決定。ここでは6記事分。