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


