カスタム投稿タイプの投稿に割り当てられているタクソノミ-の項目(ターム)を取得して、ページに表示する関数としてthe_terms()関数があります。
1 |
the_terms(投稿ID,’タクソノミ-スラッグ’); |
今回は、このthe_terms()の使い方を解説したあとに、get_the_terms()についてもチェックしたいと思います。
the_terms()関数を使ってターム名を取得する方法
このthe_terms()関数を使うことでカスタム投稿タイプの投稿に割り当てられているタクソノミ-のタームを取得・表示できます。
仮に、タクソノミ-スラッグを地域を表す「erea」にしたとしましょう。
その場合、WordPressのテンプレートに記述するコードは
1 |
<?php the_terms(get_the_ID,'erea');?> |
となります。
get_the_IDで投稿IDを取得し、その次にタクソノミ-スラッグで投稿タイプを指定することで、投稿のターム情報を取得・表示できるんですね。
※タクソノミ-スラッグについて知りたい方は「カテゴリータイプのカスタムタクソノミ-の作成例。【画像】入りで解説」で解説しているので、参照して下さい。タクソノミ-についての記述がありますから。
さて、試しにテストサイトにコードを記述してみるとちゃんと表示されています。
因みにこのページはカスタム投稿タイプ用のアーカイブページになります。
投稿日時が記載されている横に「東京都」「愛知県」と記載されているのがターム名になります。
投稿日時のコードと合わせて記述したコードは下記の通りです。
1 |
<time datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y年m月d日(l)') ?></time><h1><?php the_terms(get_the_ID(),'erea');?></h1> |
ここで1つポイントですが、先ほどちらっとこのページはアーカイブページと言いましたが、今回使用しているget_the_ID()関数はループの中でのみ使用する事になっている関数です。
関数リファレンス/get the ID
~中略~
説明
在の投稿のID(数値)を取得します。このタグは、ループのなかでのみ使用することができます。
※ただ、実際にループ外で使用してみると正常に機能している場合もあったんですが、まあ、WordPress Codexでループのなかでのみ使用、と言っているのでそうしておいた方が無難ですね。知らない間にエラーがでていたっていう事態も避けられるので。
じゃあ、ループ外でタームを出力するにはどうしたらいいのか?
そんな時はget_the_terms()関数を使います。
get_the_terms()関数を使ってターム名を取得する方法
このget_the_terms()はパラメータに投稿IDとタクソノミ-を指定します。
1 |
<?php get_the_terms( 投稿ID, タクソノミ-スラッグ ); ?> |
投稿IDの取得は$post->IDで取得します。
あとは、タクソノミ-スラッグを書けば、OKです。
さて、実はこれだけではターム名を表示することができません。
まだ、ターム名を取得しただけなので、今度は出力しないと表示されないんですね。
出力するために必要なコードはforeach ( $terms as $term ){echo $term->name};になります。
foreachは、配列を順番に処理するphpの関数です。
この関数を使って、get_the_terms()で取得したタームの情報を出力できる状態に処理します。
そして、$terms->nameでタームの情報を取り出し、echoを使って表示させています。
この一連の流れを1つのコードにすると以下のようになります。
1 2 3 4 5 |
<?php $terms = get_the_terms($post->ID,'erea'); foreach ( $terms as $term ){ echo 'タームは:'.$term->name; } ?> |
ただ、こちらは使う頻度としては少ないと思います。
ターム名を出力する時ってたいていの場合は、ループの中で表示しますからね。
それでも、知っておいた損はないと思います。
ターム名を表示するthe_terms()とget_the_terms()の使い方まとめ。
ターム名を表示するためには、the_terms()とget_the_terms()のどちらかの関数を使うことになりますが、ループ内であればget_the_IDを使うthe_terms()を使う。
ループ外であれば、少しコードが長くなるけれど、get_the_terms()を使う、という使い分けが良さそうです。