22:00よりサイトのメンテナンスを開始します×

エーデルハーツ

Custom WordPress Support & Development

WordPress開発者向けチートシート:register_taxonomy 主要パラメータ完全ガイド

WordPressサイトで扱うコンテンツが増えてくると、標準の「カテゴリー」や「タグ」だけでは分類しきれなくなることがあります。そんな時、独自の分類軸を作成できるのが「カスタムタクソノミー」です。例えば、書籍サイトなら「著者」「出版社」「ジャンル」、不動産サイトなら「エリア」「物件種別」「築年数」といった独自の分類方法を定義できます。これを実現するのがregister_taxonomy()関数です。

register_taxonomy()関数には多くのパラメータがあり、これらを理解することでカスタムタクソノミーの振る舞いや管理画面での表示、フロントエンドでの利用方法などを細かく制御できます。この記事では、その主要なパラメータをチートシート形式で徹底解説します。

register_taxonomy() の基本的な使い方

カスタムタクソノミーは、カスタム投稿タイプと同様に、通常テーマのfunctions.phpまたはプラグインファイル内で、initアクションフックに掛けて登録します。これは、関連付ける投稿タイプが登録された後、かつ他の多くの処理が始まる前に実行されるため、最適なタイミングです。

第一引数にはユニークなタクソノミースラッグ(半角英数字とアンダースコア、ハイフンのみ、32文字以内推奨)、第二引数にはこのタクソノミーを関連付ける投稿タイプスラッグ(単数または配列)、第三引数には設定オプションを連想配列で渡します。

register_taxonomy() で使用できる主要なパラメータ一覧

register_taxonomy()の第三引数$argsで使用できる主要なパラメータを機能別に分類しました。各パラメータの説明の冒頭には、その利用頻度や重要度を星の5段階評価で示しています。星の数の目安は以下の通りです。
★★★★★:ほぼ全ての開発で頻繁に利用され、基本かつ非常に重要なパラメータ
★★★★☆:高頻度で利用され、多くの一般的なカスタマイズで役立つ重要なパラメータ
★★★☆☆:中程度の頻度で利用され、特定の機能を実現する際に便利なパラメータ
★★☆☆☆:利用頻度はやや低めですが、特定の要件や細かな制御を行いたい場合に役立つパラメータ
★☆☆☆☆:利用頻度は低く、非常に限定的な状況や高度なカスタマイズでのみ使用されるパラメータ

パラメータ名 説明 (重要度/利用頻度) デフォルト値 設定例 / 備考
label ★★★★★
タクソノミーの単数形の名前。labels配列が未設定の場合、他の表示名もこれから自動生成されます。
string $taxonomyの値 'ジャンル', '著者'
labels ★★★★★
管理画面やテーマ内で表示される、このタクソノミーに関する様々なテキストラベルを指定する配列。詳細は後述。
array labelから自動生成 下記「labelsパラメータの詳細」参照
description ★★★☆☆
タクソノミーの説明文。管理画面などで表示されることがあります。
string '' (空文字列) '書籍のジャンルを分類します。'
public ★★★★★
このタクソノミーを一般に公開し、管理画面UIやフロントエンドでの表示を制御する包括的なスイッチ。trueにすると多くの関連パラメータ (show_ui, publicly_queryableなど) が自動的にtrueになります。
boolean true true, false
publicly_queryable ★★★★☆
フロントエンドでこのタクソノミーのクエリ(例: example.com/?genre=action やパーマリンク経由)を許可するかどうか。publictrueの場合のデフォルトはpublicの値。
boolean publicの値 true, false
hierarchical ★★★★★
タクソノミーを階層構造(親子関係)にするかどうか。カテゴリーのように振る舞わせたい場合はtrue、タグのようにフラットな構造にしたい場合はfalse
boolean false true (カテゴリー型), false (タグ型)
show_ui ★★★★☆
管理画面のUI(投稿編集画面の選択ボックス、タクソノミー管理ページなど)を表示するかどうか。
boolean publicの値 true, false
show_in_menu ★★★☆☆
管理画面の関連投稿タイプのサブメニューとして、このタクソノミーの管理ページへのリンクを表示するか。show_uitrueの場合に有効。
boolean show_uiの値 true, false
show_in_nav_menus ★★★★☆
「外観」>「メニュー」で、このタクソノミーのタームをナビゲーションメニュー項目として選択可能にするか。
boolean publicの値 true, false
show_tagcloud ★★★☆☆
タグクラウドウィジェットにこのタクソノミーのタームを表示するかどうか。通常、hierarchicalfalse(タグ型)の場合に意味があります。
boolean show_uiの値 true, false
show_in_quick_edit ★★★★☆
関連付けられた投稿タイプの一覧画面の「クイック編集」に、このタクソノミーのターム選択UIを表示するかどうか。
boolean show_uiの値
(WP 4.2以降)
true, false
show_admin_column ★★★★☆
関連付けられた投稿タイプの一覧画面に、このタクソノミーのタームを表示するカラムを追加するかどうか。ソート可能にもなります。
boolean false true, false
show_in_rest ★★★★★
このタクソノミーをWordPress REST APIで利用可能にするかどうか。ブロックエディタのターム選択パネルなどで必要です。
boolean false true, false
rest_base ★★★☆☆
REST APIのエンドポイントとなるスラッグ。デフォルトはタクソノミースラッグ。
string $taxonomy 'book-genres'
rest_controller_class ★★☆☆☆
REST APIのカスタムコントローラクラスを指定。
string 'WP_REST_Terms_Controller' 'My_Custom_Terms_Controller'
rewrite ★★★★☆
パーマリンクの書き換えルールを設定します。配列で詳細な設定(スラッグ、階層構造の反映など)が可能です。falseにすると書き換えルールを無効化。
boolean or array true (タクソノミースラッグを使用) array(
'slug' => 'genre',
'with_front' => false,
'hierarchical' => true
)
query_var ★★★★☆
フロントエンドのURLクエリ変数としてこのタクソノミーを使用可能にするか、またその変数名を指定します。trueの場合はタクソノミースラッグが使われます。文字列で任意の変数名を指定することも可能。falseで無効化。
boolean or string $taxonomy (タクソノミースラッグ) true, false, 'book_genre_filter'
capabilities ★★☆☆☆
このタクソノミーを管理するための各権限(manage_terms, edit_terms, delete_terms, assign_terms)を詳細に指定します。通常は自動生成されるもので十分です。
array (自動生成) (特定の権限をカスタマイズする場合)
default_term ★★★☆☆
投稿が最初に作成される際に、このタクソノミーのデフォルトタームを割り当てる設定。配列で名前、スラッグ、説明を指定。
array null array(
'name' => '未分類',
'slug' => 'uncategorized-genre',
'description' => 'デフォルトのジャンル'
)
sort ★★☆☆☆
このタクソノミーのタームが投稿に割り当てられた際に、タームの順序を保存するかどうか。主にwp_get_object_terms()orderbyterm_orderの場合に影響。
boolean null true, false

labelsパラメータの詳細

labelsパラメータは、管理画面の様々な場所で表示されるテキストをカスタマイズするための連想配列です。細かく設定することで、ユーザーにとって分かりやすい管理画面を提供できます。

キー 説明 一般的な値の例 (タクソノミー「ジャンル」の場合)
name タクソノミーの複数形の名前。管理画面メニューなど。 'ジャンル'
singular_name タクソノミーの単数形の名前。 'ジャンル'
search_items ターム検索時のボタンテキストなど。 'ジャンルを検索'
popular_items 非階層型で「よく使われているものから選択」のタイトル。 '人気のジャンル'
all_items ターム一覧ページのタイトルなど「すべての◯◯」。 'すべてのジャンル'
parent_item 階層型で親タームを指定する際のラベル。 '親ジャンル'
parent_item_colon 階層型で親タームを指定する際のラベル(コロン付き)。 '親ジャンル:'
edit_item ターム編集ページのタイトル。 'ジャンルを編集'
view_item ターム表示ページのテキスト。 'ジャンルを表示'
update_item ターム更新ボタンのテキスト。 'ジャンルを更新'
add_new_item 新規ターム追加ページのタイトル。 '新しいジャンルを追加'
new_item_name 新規ターム名入力欄のラベル。 '新しいジャンル名'
separate_items_with_commas 非階層型でターム入力欄の下に表示される説明文の一部。 '各ジャンルをコンマで区切ってください'
add_or_remove_items 非階層型で、メタボックス内のターム追加/削除エリアのアクセシビリティ用テキスト。 'ジャンルの追加または削除'
choose_from_most_used 非階層型で、メタボックス内の「よく使われているものから選択」リンクのテキスト。 'よく使われているジャンルから選択'
not_found タームが見つからなかった場合のメッセージ。 'ジャンルが見つかりませんでした。'
no_terms 投稿にタームが関連付けられていない場合のテキスト。 'ジャンルがありません'
items_list_navigation ターム一覧テーブルのナビゲーションのaria-label。 'ジャンルリストナビゲーション'
items_list ターム一覧テーブルのaria-label。 'ジャンルリスト'
most_used_items (WP 5.2+) よく使われているターム。デフォルトはpopular_items 'よく使われているジャンル'
back_to_items (WP 5.5+) ターム編集画面から一覧へ戻るリンクテキスト。 'ジャンル一覧へ戻る'

サンプルコード: カスタム投稿タイプ「書籍」に複数のカスタムタクソノミーを登録

カスタム投稿タイプ「書籍(book)」に対して、階層型の「ジャンル(genre)」と非階層型(タグ型)の「著者(book_author)」を登録する例です。

よくある質問 (FAQ)

Q1: カスタムタクソノミーを登録するアクションフックは、カスタム投稿タイプと同じinitで良いのですか?
A1: はい、initフックが最適です。カスタム投稿タイプとカスタムタクソノミーは密接に関連することが多いため、同じinitフック内の関数で両方を登録するのが一般的です。ただし、タクソノミーを登録する際には、関連付ける投稿タイプが既に(同じinitフックのより前の処理で、または別のinitフックのコールバックで同じ優先度なら先に)登録されているか、WordPressの組み込み投稿タイプである必要があります。
Q2: 登録したカスタムタクソノミーのアーカイブページ(例: example.com/book-genre/mystery/)が404エラーになります。
A2: カスタムタクソノミーを新しく登録したり、rewriteパラメータを変更したりした後は、WordPressのリライトルールを更新する必要があります。管理画面の「設定」 > 「パーマリンク設定」を開き、何も変更せずに「変更を保存」ボタンをクリックしてください。これによりリライトルールが再生成され、多くの場合問題が解決します。また、関連付けた投稿タイプにhas_archiveが設定されているか、タクソノミーのpublicly_queryabletrueになっているかも確認点です。
Q3: 「階層型 (hierarchical)」とは具体的にどういうことですか? メリット・デメリットは?
A3: 階層型('hierarchical' => true)は、WordPressの標準「カテゴリー」のように、ターム(分類項目)間に親子関係を持たせることができる設定です。例えば、「文学」という親ジャンルの下に「小説」「詩」という子ジャンルを作成できます。管理画面ではチェックボックス形式で選択できます。
メリットは、構造的な分類が可能で、親子関係を辿ったナビゲーションなどが作りやすい点です。
デメリットは、タームの数が非常に多くなると管理が煩雑になる可能性がある点です。
非階層型('hierarchical' => false')は、標準「タグ」のようにフラットな関係で、親子関係はありません。管理画面ではテキスト入力フィールドで追加します。自由なキーワードで分類したい場合に適しています。

まとめ

register_taxonomy()関数とそれに付随するパラメータ群は、WordPressサイトのコンテンツをより構造的かつ意味のある形で分類・整理するための強力なツールです。カスタム投稿タイプと組み合わせることで、WordPressの可能性は無限に広がります。この記事のチートシートが、あなたのサイト構築やプラグイン開発において、より柔軟でユーザーフレンドリーな分類機能を実現するための一助となれば幸いです。

私たちは、埼玉県川越市とその周辺地域でWordPressサイトの制作から高度なカスタマイズ、保守管理まで幅広くサポートしています。オンラインでの対応も得意としておりますので、全国どこからでも、WordPressに関する専門的なご相談をお寄せください。

もっとWordPressの技術を磨きたい、あるいは信頼できる技術パートナーをお探しでしたら、WordPress顧問エンジニアサービスをご検討くださいね。