今回、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,// タームごとにスラッグを配列に入れる。 ) ),
まとめ
以上、カスタムタクソノミーのターム一覧と、タームごとに記事を出力する方法をご紹介しました。
応用系もあるので、まずは基本の形を理解するようにしましょう。
最後までお読みいただきありがとうございました!