当サイトの関連記事なのですが、運営当初は子カテゴリーを使わず親カテゴリーのみで運営していました。最近カテゴリーを見直し、主カテゴリーに子カテゴリーを設けるようにしました。
今までの記述ではエントリーが属していいる直接のカテゴリーの一覧しか取得できません。しかし関連記事なら親も、その他の子も含めるのが自然と思い、親カテゴリーと属する子カテゴリー全ての一覧を取得してみることにしました。
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; ?>
一応、思った通りの動作ができました。なんかカテゴリー関連は色々やり方がありますね。一度まとめないと・・・・