WordPress

WordPress ターム情報の取得と表示方法

WordPress ターム情報の取得と表示方法

WordPress のタクソノミーに追加されたターム情報の取得と表示方法を紹介します。
例えば、カスタム投稿タイプに紐付いたタクソノミーのタームの一覧を表示したり、タームアーカイブでタームの名前や説明を表示したい場合に便利な方法です。

  1. タームとは?
  2. タクソノミーに追加されたターム情報を表示する方法
    1. タームに紐づく投稿の数でソートする
    2. 任意の順番でソートする
  3. taxonomy.php でターム情報の取得と表示方法
    1. タームスラッグを表示
    2. タームタイトルを表示
    3. タームディスクリプションを表示
    4. ターム情報をまとめて取得する
  4. single.php でターム情報の取得と表示
    1. ターム名を表示
    2. タームリンクを表示
  5. タームスラッグからタームIDを取得
  6. ターム一覧を表示
    1. タームの投稿数を表示
    2. 投稿数をタグで囲う
    3. 投稿数を囲っている括弧を取り除く
  7. WP_Term_Query を使ってターム情報の取得と表示

1.タームとは?

タームとは?

WordPress には投稿を分類するための機能(カテゴリーやタグ)が組み込まれています。それらの分類とは別に、オリジナルの分類を追加するための機能として、カスタム分類(カスタムタクソノミー、以下タクソノミー)を作成することができます。そしてそのタクソノミーの中で追加する個々の項目のことをタームと呼びます。

2.タクソノミーに追加されたターム情報を表示する方法

タクソノミーに追加されたタームの一覧を表示する方法を紹介します。
次のコードはタクソノミーが information-category の場合に、アーカイブページのリンクがついたタームの一覧を表示します。

<?php
$terms = get_terms( 'information-category');
foreach ( $terms as $term ){
echo '<a href="'.get_term_link($term->slug, 'information-category').'">'.$term->name.'</a>'; //タームのリンク
}
?>

取得したタームから名前やタームアーカイブのリンクなどを取り出すことができます。
次のコードは、名前、スラッグ、説明、タームID、直近の子ターム、タームのリンクを表示する方法です。

<?php
$terms = get_terms( 'information-category');
foreach ( $terms as $term ){
echo $term->name; //名前
echo $term->slug; //スラッグ
echo $term->description; //説明
echo $term->term_id; //タームID
echo $term->parent; //直近の子ターム
echo get_term_link($term->slug, 'information-category'); //タームのリンク
}
?>

これ以外にも WordPress のプラグイン Advanced Custom Fields を使うことで、固有の値をタームに登録して表示することもできます。
詳しい方法はWordPress プラグイン Advanced Custom Fields の出力方法を参照してください。

タームに紐づく投稿の数でソートする

タームに紐づく投稿の数でソートする場合は orderby を使用します。
例えば、タクソノミーが information-category で、タームに紐づく投稿が多い順にソートする場合は、次のコードを追加します。

<?php
$terms = get_terms( 'information-category','orderby=count&hide_empty=1&order=DESC');
foreach ( $terms as $term ){
echo '<a href="'.get_term_link($term->slug, 'information-category').'">'.$term->name.'</a>'; //タームのリンク
}
?>

orderby=count は投稿数、 hide_empty=1 は空のタームを出力しない、order=DESC は降順で並び替えます。
引数を指定することで、ソートの内容を自由にカスタマイズすることもできます。

任意の順番でソートする

タームの順番を任意の順番で表示したい場合はプラグインを使うのがおすすめです。
代表的なプラグインで言うと PS Taxonomy ExpanderAnything Order などがありますが、個人的には、適用範囲を自由に設定できる Intuitive Custom Post Order がおすすめです。

並び替えの注意点として、テンプレート側でも順番の指定をしている場合はプラグインの効果を無視して表示される場合があります。表示がうまくいかない場合は各プラグインの注意事項を確認しましょう。

3.taxonomy.php でターム情報の取得と表示方法

タームアーカイブページでは、簡単な記述でスラッグ、タイトル、ディスクリプションを表示することができます。
次のコードは、カスタム投稿タイプ info、タクソノミー information-category、ターム名 ほげほげ(タームスラッグ hogehoge)のページの場合の表示方法です。

タームスラッグを表示

現在表示しているタームアーカイブページのタームスラッグを表示します。

<?php echo $term; ?>

タームタイトルを表示

現在表示しているタームアーカイブページのタームタイトルを表示します。

<?php single_term_title(); ?>

特定の文言の後にタームタイトルを表示する場合はこちら。

<?php single_term_title('今表示しているカテゴリは'); ?>

タイトルを変数に格納する場合はこちら。

<?php $current_term = single_term_title("", false); ?>

タームディスクリプションを表示

現在表示しているタームアーカイブページのタームディスクリプションを表示します。

<?php term_description(); ?>

ターム情報をまとめて取得する

ターム情報をまとめて取得する場合は get_queried_object を使う方法があります。
get_queried_object は現在表示している投稿オブジェクトを取得することができます。
例えば、投稿ページを表示中なら投稿オブジェクト、タームアーカイブならタームオブジェクトを取得できます。
次のコードでは、スラッグ・タイトル・ディスクリプションをまとめて取得します。

<?php
$term_object = get_queried_object(); // タームオブジェクトを取得
echo $term_object->slug; // タームスラッグ
echo $term_object->name; // タームタイトル
echo $term_object->description; // タームディスクリプション
?>

4.single.php でターム情報の取得と表示

現在表示している投稿に紐づくタームを出力する場合は get_the_terms を使います。
次のコードでは、カスタム投稿タイプ info、タクソノミー information-category の場合の表示方法です。

<?php
$terms = get_the_terms($post->ID,'information-category');
foreach( $terms as $term ) {
echo $term->term_id; // タームID
echo $term->name; // 名前
echo $term->slug; // スラッグ
echo $term->term_group; // タームグループ
echo $term->term_order; // タームオブジェクト
echo $term->term_taxonomy_id; // タームタクソノミーID
echo $term->taxonomy; // タクソノミー
echo $term->description; // ディスクリプション
echo $term->parent; // 親
echo $term->count; // カウント
echo $term->object_id; // オブジェクトID
}
?>

ターム名を表示

ターム名を表示する場合は、次のコードを追加します。

<?php
$terms = get_the_terms($post->ID,'information-category');
foreach( $terms as $term ) {
echo $term->name;
}
?>

タームリンクを表示

次のコードは、タームアーカイブのリンクを付けて表示する方法です。

<?php
$terms = get_the_terms($post->ID,'information-category');
foreach( $terms as $term ) {
echo '<a href="'.get_term_link($term->slug, 'information-category').'">'.$term->name.'</a>';
}
?>

5.タームスラッグからタームIDを取得

タームスラッグからタームのIDを取得するには get_term_by を使います。
次のコードでは、タクソノミー information-category、ターム名 ほげほげ(スラッグ:hogehoge) の場合のターム名のIDを表示します。

<?php
$term = get_term_by( 'slug' , 'hogehoge' , 'information-category' );
echo $term->term_id; // IDを表示
?>

6.ターム一覧を表示

ページを問わず特定のタクソノミーに紐づくターム一覧の表示方法です。
次のコードは、タクソノミースラッグ information-category のターム一覧を表示します。

<ul>
<?php wp_list_categories('title_li=&taxonomy=information-category'); ?>
</ul>

HTML は次のように生成されます。


<ul>
<li class="cat-item cat-item-1 current-cat">
<a href="http://www.example.com/custompost/information-category/info" >お知らせ</a>
</li>
<li class="cat-item cat-item-2">
<a href="http://www.example.com/custompost/information-category/event" >イベント</a>
</li>
</ul>

タームアーカイブページで現在表示しているタームには current-cat が付与されます。シングルページでは付与されないので注意が必要です。シングルページでもカレントを付与するには、プラグインに頼るか function.php にコードを追加して対応します。

タームの投稿数を表示

タームの投稿数を表示する場合は show_count を加えます。表示は 1 、初期値は非表示です。

<ul>
<?php wp_list_categories('title_li=&show_count=1&taxonomy=information-category'); ?>
</ul>

HTML は次のように生成されます。
投稿数はアンカータグの後に表示。

<ul>
<li class="cat-item cat-item-1 current-cat">
<a href="http://www.example.com/custompost/information-category/info" >お知らせ</a> (1)
</li>
<li class="cat-item cat-item-2">
<a href="http://www.example.com/custompost/information-category/event" >イベント</a> (2)
</li>
</ul>

投稿数をタグで囲う

投稿数をタグで囲いたい場合は preg_replace を使います。

<ul>
<?php
$taglist = wp_list_categories(array(
'title_li' =>'',
'show_count' => 1,
'taxonomy' => 'information-category',
'echo' => 0
));
$taglist = preg_replace('/<\/a> (\([0-9]*\))/', ' <span>$1</span></a>', $taglist);
echo $taglist;
?>
</ul>

投稿数を囲っている括弧を取り除く

投稿数を囲っている括弧を取り除きたい場合は str_replace を使います。

<ul>
<?php
$taglist = wp_list_categories(array(
'title_li' =>'',
'show_count' => 1,
'taxonomy' => 'information-category',
'echo' => 0
));
$taglist = preg_replace('/<\/a> (\([0-9]*\))/', ' <span>$1</span></a>', $taglist);
$taglist = str_replace(array('(',')'), '', $taglist);
echo $taglist;
?>
</ul>

7.WP_Term_Query を使ってターム情報の取得と表示

WordPress 4.6 から追加された新しいクラス WP_Term_Query を使うことでも、ターム情報を取得・表示することができます。WP_Query の表示に慣れているのであれば、タグの整形はしやすいと思います。
表示方法はWordPress WP_Term_Query を使ってターム情報を出力する方法をご覧ください。

まとめ

WordPress のタクソノミーに追加されたターム情報の取得と表示方法を紹介しました。
ターム情報の取得と表示方法は色々あるので、テンプレートや表示したい内容に合わせた正しい方法を選択しましょう。

合わせて読みたい関連記事