カスタム投稿タイプが登録されているターム名(標準の投稿で言うところのカテゴリー名)を表示する方法のメモ。
カスタム投稿タイプのアーカイブページ(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 日本語版