「季節」「ブランド」「対応エリア」——投稿を独自の軸で分類するのがカスタムタクソノミーです。カテゴリやタグと同じ仕組みを、自分で好きな名前で追加できます。
function my_register_taxonomies() {
register_taxonomy('season', ['shohin'], [
'label' => '季節',
'public' => true,
'hierarchical' => true, // true=カテゴリ型 / false=タグ型
'show_admin_column' => true, // 管理画面の一覧に列を追加
'show_in_rest' => true, // ブロックエディタで使う
]);
}
add_action('init', 'my_register_taxonomies');第1引数がタクソノミー名、第2引数が紐づける投稿タイプ(配列で複数指定できます)。これだけで、商品の編集画面に「季節」の選択欄が追加されます。
べんりワザカスタム投稿タイプの作り方(register_post_type)先にカスタム投稿タイプを作りたいときはこちらカテゴリ型とタグ型
hierarchicalの1行で、性格がまるごと変わります。
hierarchical: true(カテゴリ型) | hierarchical: false(タグ型) | |
|---|---|---|
| 親子関係 | 持てる | 持てない |
| 編集画面 | チェックボックスで選ぶ | 自由入力で追加できる |
| 向いている用途 | 決まった分類(季節・エリア・業種) | 増えていくキーワード(素材・特徴) |
「あらかじめ決めた選択肢から選ばせたい」ならカテゴリ型、「書き手が自由に足せるようにしたい」ならタグ型。運用する人の動きで選びます。
引数の早見表
| 引数 | 意味 | よく使う値 |
|---|---|---|
label / labels | 管理画面の表示名 | '季節' |
public | サイトに表示するか | true |
hierarchical | 親子を持てるか | true / false |
show_admin_column | 記事一覧に列を出すか | true |
show_in_rest | ブロックエディタ対応 | true |
rewrite | URLの形 | ['slug' => 'season', 'with_front' => false] |
show_in_nav_menus | メニューに追加できるか | true |
meta_box_cb | 入力欄の見た目を変える | falseで欄を隠す |
query_var | URLパラメータで絞りこめるか | true |
一覧ページとテンプレート
タクソノミーを登録すると、タームごとの一覧ページが自動でできます。
/season/winter/ ← 「冬」に属する投稿の一覧このページを担当するテンプレートは、次の順で探されます。
taxonomy-season-winter.php(特定のタームだけ)taxonomy-season.php(そのタクソノミー全体)taxonomy.phparchive.phpindex.php
専用ファイルを作らなくてもarchive.phpが代用するので、まず動く状態を確認してから必要に応じて作り足します。
タームの名前や説明は、テンプレートでこう出せます。
<h1><?php single_term_title(); ?></h1>
<?php if ($desc = term_description()) : ?>
<div class="term-desc"><?php echo wp_kses_post($desc); ?></div>
<?php endif; ?>べんりワザテンプレート階層早見表(どのファイルが使われる?)テンプレート階層の全体像はこちらの早見表で記事にタームを表示する
その投稿に付いているタームはget_the_terms()(HTMLごと出すならthe_terms())で出します。
<?php the_terms(get_the_ID(), 'season', '季節:', '、'); ?>分類の一覧(絞りこみメニュー)を作りたいときはget_terms()です。
そのタームの投稿だけ取り出す
一覧を自分で組むときはtax_queryで絞りこみます。
$query = new WP_Query([
'post_type' => 'shohin',
'tax_query' => [
['taxonomy' => 'season', 'field' => 'slug', 'terms' => 'winter'],
],
]);べんりワザtax_queryでカテゴリ・タクソノミーで絞りこむtax_queryの条件の書き方(AND/OR・複数分類)はこちらタクソノミーとカスタムフィールドの使い分け
同じ「追加情報」でも、役割が違います。
- タクソノミー——一覧を絞りこむ軸。専用の一覧ページとURLができ、絞りこみが速い
- カスタムフィールド——その記事で表示する値。価格・サイズ・日付など
判断の目安は「そのデータで一覧を見たいか」。「冬の商品だけ見たい」ならタクソノミー、「価格を表示したいだけ」ならカスタムフィールドです。件数が増えたときの速さにも差が出ます。
べんりワザmeta_queryでカスタムフィールドで絞る・並べ替えるカスタムフィールドで絞りこむ場合の書き方と、速さの話はこちら名前の決めかたと注意点
- 半角小文字の英数字とアンダースコア、32文字以内
categorypost_tagtypeauthornamedatetermsなどWordPressが使っている名前は避ける- 投稿タイプ名と同じ名前にしない(URLがぶつかる)
あとから投稿タイプに紐づける
すでにあるタクソノミーを別の投稿タイプでも使いたいときは、1行で追加できます。
add_action('init', function () {
register_taxonomy_for_object_type('season', 'post'); // 投稿でも「季節」を使う
});逆に標準のカテゴリ・タグをカスタム投稿タイプで使いたいときは、register_post_type()の'taxonomies' => ['category', 'post_tag']が手軽です。
まとめ
register_taxonomy('名前', ['投稿タイプ'], [...])をinitフックで実行するだけhierarchicalでカテゴリ型(選ばせる)/タグ型(自由に足す)が決まる- 一覧は
taxonomy-<名前>.phpが担当。無ければarchive.phpが代用する - 一覧で絞りたい軸はタクソノミー、表示するだけの値はカスタムフィールド
分類を設計できるようになると、同じ記事データから何通りもの見せ方が作れます。