当サイトの関連記事なのですが、運営当初は子カテゴリーを使わず親カテゴリーのみで運営していました。最近カテゴリーを見直し、主カテゴリーに子カテゴリーを設けるようにしました。
今までの記述ではエントリーが属していいる直接のカテゴリーの一覧しか取得できません。しかし関連記事なら親も、その他の子も含めるのが自然と思い、親カテゴリーと属する子カテゴリー全ての一覧を取得してみることにしました。
get_term_childrenを使って全ての子カテゴリーを取得
get_term_childrenを使って親カテゴリーに属する全ての子カテゴリーを取得します。
get_term_childrenの使い方
get_term_children( $term, $taxonomy )
$termに子タームを取得するタームのid、$taxonomyにタクソノミ名を指定します。今回の場合、$termは子カテゴリーを持つ親カテゴリーのid、タクソノミ名はカテゴリーになりますので、categoryと指定します。
実装したコード
<?php //カテゴリ情報取得
$categorys = get_the_category($post->ID);
$category = $categorys[0];
if ($category->parent) { //親カテゴリーがある場合
$pid = $category->parent;
$cats = get_term_children($pid, 'category'); //子カテゴリーの情報を取得
foreach ($cats as $key => $value) {
	$catid .= $value . ',';
}
$catid .= $pid; //親カテゴリIDを追加
}else{
$catid = $category->cat_ID; //子カテゴリーがない場合
}
?>
カテゴリの情報は取得できたので、出力条件を指定する際にquery_postsのcatにカテゴリの情報を渡します。
<?php $args = array( 'post__not_in' => array($post -> ID), 'posts_per_page'=> 5, 'cat' => array($catid),//取得した全カテゴリーのid 'orderby' => 'date', 'order' => 'DESC' ); $query = new WP_Query($args); ?> <?php if( $query -> have_posts() ): ?> //ここから一覧 <?php while ($query -> have_posts()) : $query -> the_post(); ?> //一覧表示のループ処理 <?php endwhile; ?> //ここまで一覧 <?php endif; ?>
一応、思った通りの動作ができました。なんかカテゴリー関連は色々やり方がありますね。一度まとめないと・・・・


