今回、WordPressでカスタムタクソノミーのタームごとに記事を表示する方法(コード)をご紹介します。

ターム一覧の表示方法

まずはタームだけの一覧を表示するコードからみていきます。
今回はカスタム投稿を使って「お知らせページ」を作成すると仮定し、カスタムタクソノミーのスラッグを「news_cat」とします。

コード

<?php
// タクソノミーnews_catのタームを取得
$terms = get_terms('news_cat', $args);
foreach ( $terms as $term ) {
   // リンク付きのタームを表示
   echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
?>

解説

まずget_termsでタクソノミーnews_catのタームを取得します。

その後、foreachでターム一覧を表示します。

  • get_term_link($term) … タームのリンクを取得
  • $term->name … タームの名前を取得

タームごとに記事を表示する方法

ターム一覧の表示方法が分かったところで、本題であるタームごとに記事を表示するコードをみていきます。

コード

  <?php
 // タクソノミーnews_catのタームを取得
  $terms = get_terms('news_cat', $args);
  ?>
  <?php foreach ($terms as $term) : ?>
  <?php
  $query = new WP_Query(
    array(
      'post_status' => 'publish',

   // カスタム投稿のタイプを指定。カスタム投稿別のアーカイブページであれば不要。
      'post_type' => 'news',

      'tax_query' => array(
        array(
          'taxonomy' => 'news_cat',
          'field' => 'slug',
          'terms' => $term->slug,// タームごとにスラッグを配列に入れる。
        )
      ),
      
      'posts_per_page' => 3,// 3件の記事を表示。任意の値を入れる。
    )
  );
  ?>
  <?php if( $query->have_posts() ): ?>
   <!-- タームを表示 -->
    <h2><?php echo $term->name; ?></h2>
 
  <!-- タームに属する記事をループで表示 -->
    <?php while( $query->have_posts() ): $query->the_post(); ?>
      <ul>
        <li>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
      </ul>
    <?php endwhile; ?>
  <?php endif; ?>

  <?php  endforeach; ?>
  <?php wp_reset_postdata(); ?>

解説

foreachの中でループ処理を行い、タームに属する記事を表示します。

肝はこちらの部分です。
tax_queryパラメータを使って、タームのスラッグを取得して記事を出力します。

 'tax_query' => array(
        array(
          'taxonomy' => 'news_cat',
          'field' => 'slug',
          'terms' => $term->slug,// タームごとにスラッグを配列に入れる。
        )
      ),

まとめ

以上、カスタムタクソノミーのターム一覧と、タームごとに記事を出力する方法をご紹介しました。
応用系もあるので、まずは基本の形を理解するようにしましょう。

最後までお読みいただきありがとうございました!