[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;
?>