WordPressのカスタマイズで、カスタムタクソノミー(またはカスタム分類)は一番ややこしい要素のひとつです。ここでは、カスタムタクソノミー関連のテンプレートタグなどをまとめてみます。
カスタムタクソノミーを追加する
カスタムタクソノミーを追加する場合、プラグインなどで追加することもできますが、functions.phpに次を記述するのが簡単です。
register_taxonomy('area', 'post', array(
'labels' => array(
'name' => '地域'
)
));
最初のパラメーターでタクソノミー名を、2つめのパラメーターで対象のオブジェクトタイプを指定します。「post」で投稿、「page」に固定ページに追加されます。他にも、カスタムポストタイプやリビジョンなども指定できます。
チェックボックスタイプにして、階層構造を有効にする
先の方法で追加すると、「タグ」のようにテキストフィールドで入力するタイプになります。
3つめのパラメーターに「hierarchical」を追加すると、これを変更することができます。
register_taxonomy('area', 'post', array(
'labels' => array(
'name' => '地域'
),
'hierarchical' => true
));
タクソノミーページを作る
作ったタクソノミーは、次のようなURLで一覧することができます。
この時、利用されるテンプレートファイルは以下の順で使われます。
- taxonomy-area-tokyo.php
- taxonomy-area.php
- taxonomy.php
- archive.php
- index.php
選ばれたタクソノミー名などを取得する
タクソノミーページで、選ばれているタクソノミーの情報を取得するには、ファイルの先頭の方で次のように記述します。
$area = get_query_var('area'); // パラメーターからタクソノミー名を取得
$term = get_term_by('slug', $area, 'area'); // スラッグからタクソノミーの情報を取得
echo esc_html($term->name); // ラベルを表示する
「$term」には他にも次のような内容が格納されています。
- $term->term_id ... ID
- $term->slug ... スラッグ
- $term->description ... 説明文
- $term->parent ... 親タクソノミー
さらに親を取得する場合は、次のようにしましょう。
...
$parent = get_term($area->parent, 'area');
記事が属しているタクソノミーを表示する
記事の詳細ページ(single.php)などで、その記事が属しているタクソノミーを表示するのは、次のテンプレートタグが一番簡単です。
the_terms(get_the_ID(), 'area');
次のような HTMLが出力されます。
<a href="https://custompostype-taxonomy-h2ospace-1.c9.io/event/area/hokaido/" rel="tag">北海道</a>, <a href="https://custompostype-taxonomy-h2ospace-1.c9.io/event/area/tokyo/" rel="tag">東京</a>
HTMLを自由に加工したい場合は「get_the_terms」を使います。
$terms = the_terms(get_the_ID(), 'area');
foreach ($terms as $term):
echo '<li><a href=".../<?php echo esc_attr($term->slug); ?>/"><?php echo esc_html($term->name); ?></a></li>';
endforeach;
タクソノミーを判断する
ナビゲーションの処理などで、今表示されているタクソノミーがなにかを判断したい場合は、「is_tax」を使います(is_termは非推奨になりました)
<li class="nav<?php echo (is_tax('area', 'tokyo') ? ' active' : ''); ?>">東京</li>