[WordPress] 記事に紐づいたタクソノミー・タームを表示する

WordPressのタクソノミー・タームに関する備忘録です。
記事に登録したカテゴリを表示させる方法をまとめます。

前提:カスタムタクソノミーの定義

functions.php で定義します。

下記は、カスタム投稿タイプ「ブログblogに、
タクソノミー「カテゴリblog_categoryを定義する例です。

register_post_type( 'blog', [
  'label' => 'ブログ',
  'public' => true,
  'has_archive' => true,
]);
register_taxonomy( 'blog_category', 'blog', [
  'label' => 'カテゴリ',
  'hierarchical' => true,
  'show_in_rest' => true
]);

管理画面で登録したカテゴリひとつひとつをタームと呼びます。

参考:
関数リファレンス/register post type
関数リファレンス/register taxonomy

記事に紐づくタームの取得方法

記事に紐づいたタームを取得するには、get_the_terms()を使います。
ターム一覧ページへのリンクURLが欲しい場合は、get_term_link()を使います。

$terms = get_the_terms('記事ID', 'タクソノミー名');
foreach($terms as $term):

  echo $term->name;  //ターム名
  echo $term->slug;  //スラッグ

  //taxonomy.phpへのURL
  echo get_term_link($term);
  echo get_term_link($term->slug, 'タクソノミー名');

endforeach;

参考:
関数リファレンス/get_the_terms
関数リファレンス/get term link

関連記事:
記事に関わらず、タクソノミーに登録中のタームを全て取得する「get_terms」の紹介はこちら。
[WordPress] タクソノミー・タームを全て取得&表示する

実装サンプル

archive.php等で、記事リスト中にカテゴリを表示する

<?php
$queryarg = [
  'post_type' => 'blog',
  'posts_per_page' => -1,
];
$query = new WP_Query($queryarg);
if($query->have_posts()): 
  while($query->have_posts()): $query->the_post();
  $terms = get_the_terms($post->ID, 'blog_category');
?>
<a href="<?php the_permalink(); ?>">
  <?php 
  the_title(); //記事タイトル

  if($terms):
    foreach($terms as $term):
      echo $term->name; //ターム名
    endforeach;
  endif;
  
  ?>
</a>
<?php
  endwhile;
  wp_reset_postdata();
endif;
?>

single.php内でカテゴリを表示する

single.phpにはユニークな$post->IDがあるため、テンプレート内のどこでも取得可能です。

<?php
$terms = get_the_terms($post->ID, 'blog_category');
if($terms):
  foreach($terms as $term):
    echo $term->name; //ターム名
  endforeach;
endif;
?>