カスタム投稿一覧にタクソノミーを表示させる

カスタム投稿タイプの記事一覧ページに投稿時に設定したタクソノミー(カテゴリー/タグ)を表示させる方法をご紹介します。

通常の投稿タイプとカスタム投稿タイプではタクソノミー(カテゴリー)の表示方法が異なります。通常の投稿タイプでthe_category()the_tags()をループ内で使うことで各投稿に設定されているカテゴリーやタグを表示することができますが、カスタム投稿タイプの場合同じようにテンプレートタグを使用しても取得することはできません。

カスタム投稿のタクソノミーを取得したい場合get_the_terms()タグをループ内で使用します。詳細は後述しますが、投稿タイプとカスタム投稿タイプではタクソノミーを取得するテンプレートタグが違うということを最初に覚えておきましょう。

投稿タイプとカスタム投稿のタクソノミーテンプレートタグの違い

カテゴリータグ
投稿タイプthe_category()the_tags()
カスタム投稿タイプget_the_terms()get_the_terms()

他にもテンプレートタグはありますが基本的には上記で事足りるので省略しています。

カスタム投稿一覧ページでタクソノミーを表示する

タクソノミーを取得したい場合get_the_terms()をループ内で使用する必要があります。まず手始めに、パラメーターを指定して下記のコードをループ内に記述してください。

var_dump( get_the_terms(get_the_ID(), 'your_register_taxonomy_name') );

上記の'your_register_taxonomy_name'にはfunctions.phpで登録しているregister_taxonomy()のタクソノミー名です。

オブジェクト情報が表示されていればタクソノミーは取得できている状態になります。あとはその情報をforeach文を使ってタクソノミー名/URL情報を取得します。

$terms = get_the_terms(get_the_ID(), 'your_register_taxonomy_name');

if(!$terms == false){
	foreach($terms as $term){
		echo '<a href="' . get_term_link($term->term_taxonomy_id) . '">' . $term->name . '</a>';
	}
}

あとはお好みにdiv要素などを追加してあげればHTML設計しやすいと思います。

functions.phpで関数化

これらのコードをfunctions.phpに記述して関数にしました。

function get_custom_post_terms(){
	$terms = get_the_terms(get_the_ID(), 'your_register_taxonomy_name');
	echo '<div class="custompost-terms">';
	if(!$terms == false){
		foreach($terms as $term){
			echo '<a href="' . get_term_link($term->term_taxonomy_id) . '">' . $term->name . '</a>';
		}
	}
	echo '</div>';
}

呼び出したい場合はループ内に下記のコードを使用します。

<?php get_custom_post_terms(); ?>