WordPressで親子のカスタムタクソノミーを表示する方法

WordPressで、親子関係にあるカスタムタクソノミーのタームを表示する方法の備忘録です。

親タームと子タームの一覧を表示する

親タームを見出しに、該当する子タームの一覧をリスト形式で表示します。

親タームと子タームを一覧表示するコードです。

$parent_terms = get_terms('tax-name', ['parent' => 0, 'hide_empty' => false]);
foreach ($parent_terms as $parent_term) {
  echo '<h3>' . $parent_term->name . '</h3>';
  echo '<ul>';
  $child_terms = get_terms('tax-name', ['parent' => $parent_term->term_id, 'hide_empty' => false]);
  foreach ($child_terms as $child_term) {
    echo '<li><a href="' . get_term_link($child_term->term_id) . '">' . $child_term->name . '</a></li>';
  }
  echo '</ul>';
}

はじめに、トップレベルの親タームをget_terms()で取得します。get_terms()の第一引数「tax-name」部分には、出力したいカスタムタクソノミーの名称(タクソノミー名)を設定します。

パラメーターに'parent' => 0を指定することで、親要素を持たないタームも含めて出力しています。

また、通常は投稿がないタームは一覧に含まれませんが、'hide_empty' => falseを設定することで、投稿がない空のタームも含めて取得しています。

取得した親タームの配列をforeachのループを使用して、さらに子タームを取得して表示します。

子タームを取得する際、パラメーターに'parent' => $parent_term->term_idを指定することで、現在処理している親タームの直下にある子タームのみを限定して取得できます。

子タームの投稿一覧を表示する

さらに、親タームを見出しとして表示し、その配下にある子タームと所属する投稿の一覧を表示します。

子タームに属する投稿を一覧表示するコードを追加したソースです。

$parent_terms = get_terms('tax-name', ['parent' => 0, 'hide_empty' => false]);
foreach ($parent_terms as $parent_term) {
  echo '<h3>' . $parent_term->name . '</h3>';
  $child_terms = get_terms('tax-name', ['parent' => $parent_term->term_id, 'hide_empty' => false]);
  foreach ($child_terms as $child_term) {
    echo '<h4>' . $child_term->name . '</h4>';
    $args = array(
      'post_type' => 'post',
      'posts_per_page' => 3,
      'tax_query' => array(
        array(
          'taxonomy' => 'tax-name',
          'field' => 'term_id',
          'terms' => $child_term->term_id,
        ),
      ),
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
      echo '<ul>';
      while ($query->have_posts()) {
        $query->the_post();
        echo '<li><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></li>';
      }
      echo '</ul>';
    }
    wp_reset_postdata();
  }
}

取得した子タームをタイトル(h4)に変更しています。

さらに、各子タームのループ内でWP_Queryを実行して、該当する記事を取得して一覧表示しています。

WordPressでタームごとの記事一覧を表示する方法の詳細は、こちらの記事でまとめています。

Share on
関連記事
WordPressで投稿一覧から非公開の記事を除外する方法
WordPressで投稿一覧から非公開の記事を除外する方法
Smart Custom Fieldsで作成したフィールドの値を投稿一覧で表示する方法
Smart Custom Fieldsで作成したフィールドの値を投稿一覧で表示する方法
Smart Custom Fieldsでカスタムフィールドを作る方法
Smart Custom Fieldsでカスタムフィールドを作る方法