今回、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,// タームごとにスラッグを配列に入れる。
       )
     ),

まとめ

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

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