WordPress タームの取得と表示方法 - by Takumi HirashimaWordPress のタームの取得と表示方法を紹介しています。タクソノミーに登録されたターム一覧の表示方法。投稿数をタグで囲う、タームを好きな順番で並び替える方法など。
WordPress のタームの取得と表示方法を紹介します。
一覧ページや詳細ページでは取得の仕方が異なる場合があります。
もくじから目的にあった取得方法を探してご利用ください。
- single.php でタームの情報の表示方法
- タームスラッグからタームIDを取得して表示する方法
- タームIDからタームスラッグを取得して表示する方法
- ターム一覧の表示方法
- WP_Term_Query を使ってターム情報の取得と表示方法
- タームに紐づくカスタムフィールド値の取得と表示方法
- タームを好きな順番で並び替える方法
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;
変数に入れて表示する場合はこちら。
$term_name = $term->name; // 変数に代入
echo $term_name; // 表示
taxonomy.php で取得するには「タームタイトルの表示方法」を、single.php で取得するには「single.php でターム名の表示方法」をご覧ください。
ターム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
タームIDname$term->name
ターム名slug$term->slug
タームスラッグterm_group$term->term_group
グループIDterm_taxonomy_id$term->term_taxonomy_id
タクソノミーIDtaxonomy$term->taxonomy
タクソノミー名description$term->description
タームの説明parent$term->parent
タームの親IDcount$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.タームIDからタームスラッグを取得して表示する方法
タームIDからタームスラッグを取得するには get_term()
を使用します。
次のコードでは、タームIDが 3 の場合のタームスラッグの表示方法です。
<?php
$term_id = '3'; // タームIDを指定
$term = get_term($term_id); // IDからタームを取得
echo $term->slug; // タームからスラッグを表示
?>
7.ターム一覧の表示方法
ページを問わず特定のタクソノミーに紐づくターム一覧を表示方法はいくつかあります。
ここでは 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
を使います。
次のコードは、投稿数をアンカータグの中へ追加、さらに span
で囲った状態にする方法です。
<?php
$categories = wp_list_categories(array(
'title_li' =>'',
'show_count' => 1,
'taxonomy' => 'blogcategory',
'echo' => 0
));
$categories = preg_replace('/<\/a> (\([0-9]*\))/', ' <span>\</span></a>', $categories);
echo $categories;
?>
投稿数を囲っている括弧を取り除く
投稿数を囲っている括弧を取り除く場合は preg_replace
内の記述を少し調整します。
<?php
$categories = wp_list_categories(array(
'title_li' =>'',
'show_count' => 1,
'taxonomy' => 'blogcategory',
'echo' => 0
));
$categories = preg_replace('/<\/a> \(([0-9]+)\)/', ' <span class="count">\</span></a>', $categories);
echo $categories;
?>
archive.php でターム一覧を表示する方法
archive.php 内でタームの一覧を表示したい場合は、前述した方法 wp_list_categories()
を使用することでも表示することができます。
次のコードは、タクソノミースラッグ info-cat のターム一覧を表示します。
<ul>
<?php wp_list_categories('title_li=&taxonomy=info-cat'); ?>
</ul>
この記述以外でも、条件が合えば他の記述でも archive.php 内でタームの一覧を表示することができます。
8.WP_Term_Query を使ってターム情報の取得と表示方法
WordPress 4.6 からは、新しい関数 WP_Term_Query
を使ってターム情報を取得することもできます。WP_Query
の表示に慣れているユーザーであれば扱いやすい関数になっていますが、並び方プラグインなどを絡めた出力をする場合に、プラグインの対応状況によっては意図しない表示になる場合があるので注意が必要です。
詳しい表示方法はWordPress WP_Term_Query を使ってターム情報を出力する方法をご覧ください。
9.タームに紐づくカスタムフィールド値の取得と表示方法
プラグイン Advanced Custom Fields などを使って、タームにカスタムフィールドを追加することができます。
そういったときに、タームに紐づくカスタームフィールド値を取得するにはAdvanced Custom Fields で登録したタームのフィールド値を取得する方法で詳しく解説しています。
10.タームを好きな順番で並び替える方法
タームを好きな順番で並び替えるにはプラグインを使うのがおすすめです。
代表的なプラグインは PS Taxonomy Expander や Anything Order などがありますが、個人的には適用範囲を自由に設定できる Intuitive Custom Post Order がおすすめです。
並び替えの注意点として、テンプレート側でも順番の指定をしている場合はプラグインの効果を無視して表示される場合があります。
表示がうまくいかない場合は各プラグインの注意事項を確認しましょう。
まとめ
WordPress のタクソノミーに追加されたタームの取得と表示方法を紹介しました。
タームの表示方法は多岐に渡ります。テンプレートや表示したい内容に合わせた適した方法を選択しましょう。