WordPress タクソノミーの親・子・孫のターム一覧と、孫タームに該当する記事一覧を出力する方法

Last update 
/ Posted by Takumi Hirashima

WordPress のカスタム分類(taxonomy、以下タクソノミー)の親・子・孫のカテゴリ(term、以下ターム)一覧に、孫タームの記事一覧を追加して出力する方法を紹介します。
例えば飲食店のサイトで、タームを「親:東京都(都道府県)」「子:西東京市(区市)」「孫:下保谷店(店舗名)」と登録、そこから都道府県別の店舗一覧を表示したいときに便利です。

ターム一覧と孫タームに紐づく記事一覧の出力方法

ターム一覧と孫タームに紐づく記事一覧の出力方法を紹介します。
次のコードは、カスタム投稿タイプ blog、タクソノミー blog-cat の場合の出力方法です。

<?php $categories = get_terms('blog-cat','parent=0'); // タクソノミーを指定、親のいないタームを取り出します
foreach ( $categories as $cat ) {
echo '<h2>' . esc_html($cat->name) . '</h2>'; // 親タームのタイトルを出力

  $children = get_terms('blog-cat','hierarchical=0&parent='.$cat->term_id);
  foreach ( $children as $child ) {
  echo '<h3>' . esc_html($child->name) . '</h3>'; // 子タームのタイトルを出力

    $grandchildren = get_terms('blog-cat','hierarchical=0&parent='.$child->term_id);
    foreach ( $grandchildren  as $grandson ) {
    echo '<h4>' . esc_html($grandson->name) . '</h4>'; // 孫タームのタイトルを出力

      $catslug = $grandson->slug; // 以下孫タームに紐づく記事一覧のクエリを設定
      $args = array(
      'post_type' => 'blog', // カスタム投稿タイプを指定
      'blog-cat' => $catslug ,
      'posts_per_page' => -1
      );
      $myquery = new WP_Query( $args ); ?>

<?php if ( $myquery->have_posts()): ?>
<ul>
<?php while($myquery->have_posts()): $myquery->the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

<?php } ?>
<?php } ?>
<?php } ?>

まとめ

WordPress のタクソノミーの親・子・孫のターム一覧に、孫タームの記事一覧を追加して出力する方法を紹介しました。
投稿に親・子・孫のチェックが無い場合や、同一階層のタームを複数チェックしてしまうと、うまく表示されません。
その他のタームの出力方法は関連記事を合わせて参照してください。

私が続けて読みたい関連記事

スポンサーリンク