WordPress

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

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

WordPress のタームの取得と表示方法を紹介します。
例えば、ターム一覧を表示したり、アーカイブページでターム名や説明を表示する時に便利な方法です。

  1. タームとは?
  2. まずは基本、タクソノミーに登録されたターム情報の表示方法
    1. ターム名を取得
    2. タームIDを取得
    3. タームスラッグを取得
    4. タームアーカイブのリンクを取得
  3. taxonomy.php でターム情報の取得と表示方法
    1. タームアーカイブページでタームIDの表示方法
    2. タームスラッグの表示方法
    3. タームタイトルの表示方法
    4. タームディスクリプションの表示方法
    5. ターム情報をまとめて取得する
  4. single.php でタームの情報の表示方法
    1. single.php でターム名の表示方法
    2. single.php でタームリンクの表示方法
  5. タームスラッグからタームIDを取得して表示する方法
  6. ターム一覧の表示方法
    1. タームの投稿数の表示方法
    2. 投稿数をタグで囲う
    3. 投稿数を囲っている括弧を取り除く
  7. WP_Term_Query を使ってターム情報の取得と表示方法
  8. タームに紐づくカスタムフィールド値の取得と表示方法
  9. タームを好きな順番で並び替える方法

1.タームとは?

タームとは?

WordPress には投稿を分類するための機能として「カテゴリ」や「タグ」が標準で用意されています。
その分類とは別に、オリジナルの名称や値を持つカスタム分類(カスタムタクソノミー、以下タクソノミー)を作成することができます。
そしてタクソノミーの中で追加する個々の項目をタームと呼びます。

2.まずは基本、タクソノミーに登録されたターム情報の表示方法

まずは基本の表示方法、タクソノミーに登録されたターム一覧の表示方法を紹介します。
例えば、タクソノミースラッグが info-cat の場合に、アーカイブページへのリンクがついたターム一覧を表示するには、次のコードをテンプレートに追加します。

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

投稿に紐づくターム一覧を取得したい場合はWordPress で投稿に紐づくタームの一覧を表示する方法をご覧ください。

ターム名を取得

取得したタームからは、名前やアーカイブへのリンクなどを個別に取り出すこともできます。
プロパティ名 name を指定するとターム名を取得できます。

$term->name;

タームIDを取得

プロパティ名 term_id を指定するとタームIDを取得できます。

$term->term_id;

タームスラッグを取得

プロパティ名 slug を指定するとタームスラッグを取得できます。

$term->slug;

タームアーカイブのリンクを取得

タームアーカイブのリンクを取得するには get_term_link() を使います。
タクソノミースラッグが info-cat は適宜変更を加えてご利用ください。

get_term_link($term->slug, 'info-cat');

そのほかにも、以下のプロパティ名を指定することでタームから様々な値を取得することができます。

term_id
$term->term_id
タームID
name
$term->name
ターム名
slug
$term->slug
タームスラッグ
term_group
$term->term_group
グループID
term_taxonomy_id
$term->term_taxonomy_id
タクソノミーID
taxonomy
$term->taxonomy
タクソノミー名
description
$term->description
タームの説明
parent
$term->parent
タームの親ID
count
$term->count
そのタームが付与されている投稿数

$term は環境に合わせて適宜変更を加えてください。

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

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

タームアーカイブページでは、簡単にタームスラッグ・タームタイトル・タームディスクリプションを表示することができます。
次のコードは、カスタム投稿タイプ info、タクソノミー info-catの場合の、タームアーカイブページのでの表示方法です。

タームアーカイブページでタームIDの表示方法

taxonomy.php で現在表示しているタームアーカイブページのタームIDを取得するには get_queried_object_id を使用します。

<?php // タームIDの取得と表示
$term_id = get_queried_object_id(); // タームIDの取得
echo $term_id; // タームIDの表示
?>

タームスラッグの表示方法

現在表示している taxonomy.php や taxonomy_$taxonomy.php でアーカイブページのタームスラッグを表示するには、次のコードのように、$term だけでタームスラッグを表示できます。

<?php echo $term ?>

タームタイトルの表示方法

taxonomy.php で現在表示しているタームアーカイブページのタームタイトルを表示するには single_term_title() を使用します。

<?php single_term_title(); ?>

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

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

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

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

タームディスクリプションの表示方法

taxonomy.php で現在表示しているタームアーカイブページのタームディスクリプションを表示するには term_description() を使用します。

<?php echo term_description(); ?>

term_description はPタグを自動生成するため strip_tags() を使ってタグを削除します。

<?php echo strip_tags(term_description()); ?>

タームの説明内でPタグ以外のタグを使用している場合は、一度変数に値を代入するようにしてください。

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

現在表示しているタームアーカイブページのタームオブジェクトを取得するには get_queried_object() を使用します。
次のコードはタームスラッグ・タームタイトル・タームディスクリプションを取得する方法です。

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

4.single.php でタームの情報の表示方法

single.php で表示している投稿に紐づくタームを表示する場合は get_the_terms() を使用します。
例えば、タクソノミースラッグが info-cat の場合に、次のコードをテンプレートに追加します。

<?php
$terms = get_the_terms($post->ID,'info-cat');
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
}
?>

single.php でターム名の表示方法

single.php で投稿に紐づくターム名を表示する場合は、次のコードを追加します。

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

タクソノミースラッグ info-cat は適宜変更を加えてご利用ください。

single.php でタームリンクの表示方法

single.php で投稿に紐づくタームをアーカイブリンク付きで表示する場合は、次のコードを追加します。

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

5.タームスラッグからタームIDを取得して表示する方法

タームスラッグからタームのIDを取得するには get_term_by() を使用します。
次のコードでは、タクソノミースラッグが info-cat でタームスラッグが hogehoge の場合のタームIDの表示方法です。

<?php
$term = get_term_by('slug', 'hogehoge', 'info-cat');
echo $term->term_id; // タームIDを表示
?>

6.ターム一覧の表示方法

ページを問わず特定のタクソノミーに紐づくターム一覧を表示方法はいくつかあります。
ここでは wp_list_categories() を使った表示方法を紹介します。
次のコードは、タクソノミースラッグ info-cat のターム一覧を表示します。

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

wp_list_categories() を使って表示すると li タグで成形されて表示されます。
HTML は次のように生成されます。

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

wp_list_categories() を使って表示する時のメリットは、現在表示しているタームには現在表示していることを示すカレントクラス current-cat が付与されることです。
ちなみに、カレントクラスはシングルページでは付与されないので、任意の場所でカレントを付与したい場合はプラグインに頼るか function.php にコードを追加して対応します。

タームの投稿数の表示方法

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

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

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

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

投稿数をタグで囲う

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

<ul>
<?php
$taglist = wp_list_categories(array(
'title_li' =>'',
'show_count' => 1,
'taxonomy' => 'info-cat',
'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' => 'info-cat',
'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 を使ってターム情報を出力する方法をご覧ください。

8.タームに紐づくカスタムフィールド値の取得と表示方法

プラグイン Advanced Custom Fields などを使って、タームにカスタムフィールドを追加することができます。
そういったときに、タームに紐づくカスタームフィールド値を取得するにはAdvanced Custom Fields で登録したタームのフィールド値を取得する方法で詳しく解説しています。

9.タームを好きな順番で並び替える方法

タームを好きな順番で並び替えるにはプラグインを使うのがおすすめです。
代表的なプラグインは PS Taxonomy ExpanderAnything Order などがありますが、個人的には適用範囲を自由に設定できる Intuitive Custom Post Order がおすすめです。

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

まとめ

WordPress のタクソノミーに追加されたタームの取得と表示方法を紹介しました。
タームの表示方法は多岐に渡ります。テンプレートや表示したい内容に合わせた適した方法を選択しましょう。

この記事をシェアする