説明
register_taxonomy() は、カスタムタクソノミー(独自の分類)を登録する関数です。カテゴリーやタグのような分類を、カスタム投稿などに追加できます。
基本構文
register_taxonomy( string $taxonomy, array|string $object_type, array|string $args = array() ): WP_Taxonomy|WP_Error
引数
$taxonomy:タクソノミー名(32文字以内、小文字・数字・アンダースコアのみ)$object_type:対象の投稿タイプ(配列も可)$args:label、hierarchical、show_in_rest、rewriteなど
戻り値
WP_Taxonomy。失敗時は WP_Error。
使い方(サンプル)
add_action( 'init', function() {
register_taxonomy( 'genre', 'post', array(
'label' => 'ジャンル',
'hierarchical' => true,
'show_in_rest' => true,
) );
} );
注意点
initフックの中で呼びます。- ブロックエディターで使うには
show_in_restをtrueにします。 - 登録後、パーマリンクが反映されないときは「設定 → パーマリンク」を保存し直します。
実務での使いどころ
- お知らせの種類、商品のカテゴリーなど、独自の分類(カスタムタクソノミー)を作るとき。
- カスタム投稿タイプに、専用のカテゴリーやタグを付けるとき。
show_in_restを指定して、ブロックエディターで使えるようにするとき。
よくあるミスと対処
initフックの外で呼んでいる。- タクソノミーのスラッグが不適切。小文字の英数字・ハイフン・アンダースコアのみで、32文字以内にする。
- 追加した直後に、アーカイブが404になる。管理画面の「設定 > パーマリンク設定」を開いて保存し、リライトルールを更新する。
show_in_restを指定せず、ブロックエディターで、ターム選択のパネルが出ない。hierarchicalの指定を間違える。trueはカテゴリーのように階層あり、false(既定)はタグのように階層なし。
NG例
register_taxonomy( 'news_cat', 'news' ); // init フックの外で、REST API にも出ない
OK例
add_action( 'init', function () {
register_taxonomy( 'news_cat', 'news', array(
'label' => 'お知らせの種類',
'hierarchical' => true,
'show_in_rest' => true,
'rewrite' => array( 'slug' => 'news-cat' ),
) );
} );
使い分け早見表
| 迷う場面 | 判断 |
|---|---|
| 投稿を、階層ありで分類したい | hierarchical を true(カテゴリー型) |
| 投稿を、自由なキーワードで分類したい | hierarchical を false(タグ型) |
| 分類を足したら、404になった | flush_rewrite_rules()、またはパーマリンク設定の再保存 |
関連項目
register_post_type()、get_terms()、wp_set_object_terms()、flush_rewrite_rules()
公式リファレンス:register_taxonomy() | Function | WordPress Developer Resources

コメント