register_taxonomy() の使い方|説明・引数・注意点

説明

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

コメント

タイトルとURLをコピーしました