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

Last update 
/ Posted by Takumi Hirashima

WordPress のカスタム分類(taxonomy、以下タクソノミー)の親・子のカテゴリ(term、以下ターム)一覧に、各タームの記事一覧を追加して出力する方法を紹介します。
例えばカスタム投稿タイプの記事一覧を、サイトマップ的に表示したいときに便利です。

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

ターム一覧とタームに紐づく記事一覧の出力方法を紹介します。
次のコードは、カスタム投稿タイプ blog、タクソノミー名 blog-cat の場合の出力方法です。次のコードを出力したいテンプレートファイルに追加してください。

<?php // WordPress のタクソノミーの親・子のターム一覧とタームに紐づく記事一覧の出力
  $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);
    if($children){ // 子カテゴリの有無

      foreach ( $children as $child ) {
        echo '<h3>' . esc_html($child->name) . '</h3>'; // 子カテゴリタイトル
        $catslug = $child->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 
    } else { // 子カテゴリがなければ親カテゴリに紐づく記事一覧を出力
      $catslug = $cat->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 } // 子カテゴリの有無 if文終了 ?>
<?php } // 出力の終了 ?>

まとめ

WordPress のタクソノミーの親・子のターム一覧に、各タームの記事一覧を追加して出力する方法を紹介しました。
投稿に親・子のタームにチェックが無い場合や、同一階層のタームを複数チェックする必要がある場合には対応していません。
姉妹記事として「WordPress タクソノミーの親・子・孫のターム一覧と、タームに該当する記事一覧を出力する方法」があります。孫までを出力したい場合はそちらを参照してください。
WordPress タクソノミーの親・子・孫のターム一覧と、孫タームに該当する記事一覧を出力する方法

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

スポンサーリンク