WordPressで投稿記事のカテゴリー名を表示させたいとき、通常は the_category();
などのテンプレートタグを使えば簡単ですね
しかしカスタム投稿タイプの場合はこのテンプレートタグ(the_category();
)は使えません。
どうすればいいか?
……そんなとき、便利なのが「WordPress Codex」です。
以下の記事にはズバリ、その答えが載っています。
複雑なコードを書かずとも、あらかじめ get_the_term_list
や get_the_terms
などのテンプレートタグが用意されていました。
「get_the_term_list();」の使い方
この「get_the_term_list」という関数は、カスタム投稿タイプで使われているカスタムタクソノミーの情報を取得することができます。
基本的な使い方は以下のとおり。
<?php echo get_the_term_list( $id, $taxonomy, $before, $sep, $after ); ?>
各パラメーターは以下のように指定します。
- $id
- 投稿のIDを指定します。特定の記事のIDを指定するような状況でない場合「$post->ID」と記述しておきましょう。
- $taxonomy
- カスタムタクソノミーの分類名を記述します。
- $before
- 表示されるカスタムタクソノミーの前に、指定した文字列を挿入できます。
もちろんHTMLタグも利用可能。 - $sep
- 複数のタームが出力される場合に挿入される区切り文字を指定します。
- $after
- 表示されるカスタムタクソノミーの後ろに、指定した文字列を挿入できます。
こちらも当然HTMLタグが使えます。
例えばJetpack経由でカスタム投稿タイプの機能を有効化した場合、タクソノミーは「プロジェクトタイプ」と名付けられますね。
このタクソノミーのスラッグは「jetpack-portfolio-type」になるので、以下のように記述することになります。
<?php echo get_the_term_list($post->ID, 'jetpack-portfolio-type'); ?>
なお、ここでは余分なパラメータは指定せず、第1引数と第2引数のみ設定して、より簡単なコードにしています。
「get_the_terms();」の使い方
続いて「get_the_terms」の使い方です。
これは前述の「get_the_term_list」の出力と似ていますが、タームにハイパーリンクが付かない点が異なります。
基本構造は以下のとおり。
<?php get_the_terms( $id, $taxonomy ); ?>
より具体的には、「$post->ID」とタクソノミー名である「jetpack-portfolio-type」を指定して、さらにループを回して処理します。
<?php if ($terms = get_the_terms($post->ID, 'jetpack-portfolio-type')) { foreach ( $terms as $term ) { echo esc_html($term->name); } } ?>
「get_the_term_list」よりは僅かに長いコードになってしまいますが、より柔軟に該当記事のタクソノミーの情報を扱うことができるので便利です。
「the_taxonomies();」の使い方
そして最後に紹介するのが the_taxonomies();
です。
こちらはカスタマイズするには不向きですが、最も簡単にタクソノミー及びタームを表示させることができます。
使い方は以下のとおり。
<?php the_taxonomies( $args ); ?>
ループの中に記述すると、該当するカスタム投稿タイプに紐付けられた「カスタム分類」をリンクと共に出力します。
以上。
カスタム投稿タイプ(カスタムコンテンツタイプ)のカスタム分類(カスタムタクソノミー)を表示させる方法を3種類、紹介しました。
個人的にはカスタマイズと応用が効く「get_the_terms」をお勧めしますが、他の2つも簡単に設定できて便利なので状況に合わせて使い分けてみてください。