WordPressで親カテゴリーと属する全ての子カテゴリーの一覧を出力する

WordPressで親カテゴリーと属する全ての子カテゴリーの一覧を出力するのアイキャッチ画像

当サイトの関連記事なのですが、運営当初は子カテゴリーを使わず親カテゴリーのみで運営していました。最近カテゴリーを見直し、主カテゴリーに子カテゴリーを設けるようにしました。

今までの記述ではエントリーが属していいる直接のカテゴリーの一覧しか取得できません。しかし関連記事なら親も、その他の子も含めるのが自然と思い、親カテゴリーと属する子カテゴリー全ての一覧を取得してみることにしました。

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_postscatにカテゴリの情報を渡します。

<?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; ?>

一応、思った通りの動作ができました。なんかカテゴリー関連は色々やり方がありますね。一度まとめないと・・・・