JOURNAL クリエイティブとマーケティングの話

【WordPress】カスタム投稿タイプのターム名を表示する方法

カスタム投稿タイプが登録されているターム名(標準の投稿で言うところのカテゴリー名)を表示する方法のメモ。

カスタム投稿タイプのアーカイブページ(archive-$posttype.php)やシングルページ(single-$posttype.php)だけでなく、他のページにカスタム投稿タイプの情報を表示する際にも使えます。

カスタム投稿タイプのターム名を表示する方法

まずは完成したソースから。

<?php
	$terms = get_the_terms($post->ID, 'タクソノミースラッグ');
	if(!empty($terms)) {
		foreach($terms as $term):
		echo $term->name;
		endforeach;
	} else {
		echo '未分類';
	}
?>

タームに登録されていない場合は「未分類」と表示されるようにしています。

get_the_termsで記事のタームを取得する

get_the_termsは、その記事が登録されているタクソノミーのターム情報を取得するための関数です。

以下のような情報を取得することができます。

<?php
	$terms = get_the_terms($post->ID,'タクソノミースラッグ');
	foreach( $terms as $term ) {
		echo $term->term_id; // タームID
		echo $term->name; // タームの名前
		echo $term->slug; // タームスラッグ
		echo $term->term_group; // 親タームのタームID(↓の'parent'としても格納される)
		echo $term->term_taxonomy_id; // タームが属するタクソノミーのID
		echo $term->taxonomy; // タームが属するタクソノミーの名前
		echo $term->description; // タクソノミーの説明
		echo $term->parent; // 親タームのタームID(↑の'term_group'としても格納される)
		echo $term->count; // このタームが使われている回数
	}
?>

このget_the_termsを利用して記事のターム名を出力する場合は、以下のように記述します。

<?php
	$terms = get_the_terms($post->ID, 'タクソノミースラッグ');
	foreach($terms as $term):
	echo $term->name;
	endforeach;
?>

記事が未分類の場合はエラーになってしまう

ただ上記の書き方だと、記事がどのタームにも登録されていない場合にエラーになってしまいます。

そのため記事がタームに登録されているかを判別するため、以下のような条件分岐を設けています。

if(!empty($terms)) {
	//記事がタームに登録されている場合の処理
} else {
	//記事がタームに登録されていない場合の処理
}

まとめ

以上、カスタム投稿タイプのターム名を表示する方法でした。

カスタム投稿タイプ周りは思いのほか手間取ることが多いですが、タクソノミーとタームの関係性や、そもそもタクソノミーとは何なのか? みたいなところから整理していくと実装方法などイメージできるのではないかと思っています。

参考
関数リファレンス/get the terms – WordPress Codex 日本語版