Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

WordPressのカスタムタクソノミー(分類)の扱い方

More than 5 years have passed since last update.

WordPressのカスタマイズで、カスタムタクソノミー(またはカスタム分類)は一番ややこしい要素のひとつです。ここでは、カスタムタクソノミー関連のテンプレートタグなどをまとめてみます。

カスタムタクソノミーを追加する

カスタムタクソノミーを追加する場合、プラグインなどで追加することもできますが、functions.phpに次を記述するのが簡単です。

functions.php
    register_taxonomy('area', 'post', array(
        'labels' => array(
            'name' => '地域'
        )
    ));

最初のパラメーターでタクソノミー名を、2つめのパラメーターで対象のオブジェクトタイプを指定します。「post」で投稿、「page」に固定ページに追加されます。他にも、カスタムポストタイプやリビジョンなども指定できます。

チェックボックスタイプにして、階層構造を有効にする

先の方法で追加すると、「タグ」のようにテキストフィールドで入力するタイプになります。

2015-10-27_9-03-58.png

3つめのパラメーターに「hierarchical」を追加すると、これを変更することができます。

functions.php
    register_taxonomy('area', 'post', array(
        'labels' => array(
            'name' => '地域'
        ),
        'hierarchical' => true
    ));

2015-10-27_9-11-00.png

タクソノミーページを作る

作ったタクソノミーは、次のようなURLで一覧することができます。

http://example.com/area/tokyo

この時、利用されるテンプレートファイルは以下の順で使われます。

  1. taxonomy-area-tokyo.php
  2. taxonomy-area.php
  3. taxonomy.php
  4. archive.php
  5. index.php

選ばれたタクソノミー名などを取得する

タクソノミーページで、選ばれているタクソノミーの情報を取得するには、ファイルの先頭の方で次のように記述します。

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 ... 親タクソノミー

さらに親を取得する場合は、次のようにしましょう。

PHP
...
$parent = get_term($area->parent, 'area');

記事が属しているタクソノミーを表示する

記事の詳細ページ(single.php)などで、その記事が属しているタクソノミーを表示するのは、次のテンプレートタグが一番簡単です。

php
the_terms(get_the_ID(), 'area');

次のような HTMLが出力されます。

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」を使います。

PHP
$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は非推奨になりました)

PHP
<li class="nav<?php echo (is_tax('area', 'tokyo') ? ' active' : ''); ?>">東京</li>
seltzer
株式会社エイチツーオー・スペース 代表取締役 「ちゃんとWeb」をコーポレートテーマに、Web標準に準拠したメンテナンスしやすいWebサイトを「ちゃんと」作ることを目指したWeb制作会社。 WordPressを利用したサイト制作や、スマートデバイス向けサイトの制作、PHPやJavaScriptによる開発を得意とする。 また、CSS Niteや Word Campでの講演や著書などを通じ、クリエイタ
https://h2o-space.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away