2026年6月25日
2026年6月25日
WordPressでカスタムタクソノミーを作成する方法・register_taxonomy()完全ガイド
はじめに
「事例紹介を業種・規模・地域で絞り込みたい」「カテゴリとは別の独自の分類軸を追加したい」——register_taxonomy()を使えば、既存のカテゴリ・タグとは独立したカスタム分類システムをWordPressに追加できます。
症状・原因
カスタム投稿タイプを作成しても、デフォルトのカテゴリやタグはそのコンテンツには最適でないことが多いです。「業種」「地域」「担当者」など、投稿タイプ固有の分類軸が必要な場合、カスタムタクソノミーを登録することで管理・検索・フィルタリングが格段に使いやすくなります。
解決手順
ステップ1:カスタムタクソノミーを登録する
// functions.php またはプラグインファイルに追加
add_action( 'init', 'my_register_taxonomies' );
function my_register_taxonomies() {
// 階層型タクソノミー(カテゴリー型)
register_taxonomy( 'industry', [ 'case_study' ], [
'labels' => [
'name' => '業種',
'singular_name' => '業種',
'search_items' => '業種を検索',
'all_items' => 'すべての業種',
'parent_item' => '親の業種',
'parent_item_colon' => '親の業種:',
'edit_item' => '業種を編集',
'update_item' => '業種を更新',
'add_new_item' => '新しい業種を追加',
'new_item_name' => '新しい業種の名前',
'menu_name' => '業種',
],
'hierarchical' => true, // カテゴリー型(階層あり)
'public' => true,
'show_ui' => true,
'show_in_rest' => true, // Gutenberg対応
'show_admin_column' => true, // 投稿一覧に列を表示
'rewrite' => [ 'slug' => 'industry' ],
'query_var' => true,
] );
// 非階層型タクソノミー(タグ型)
register_taxonomy( 'skill', [ 'case_study', 'post' ], [
'labels' => [
'name' => 'スキル',
'singular_name' => 'スキル',
'add_new_item' => '新しいスキルを追加',
],
'hierarchical' => false, // タグ型(階層なし)
'public' => true,
'show_in_rest' => true,
'rewrite' => [ 'slug' => 'skill' ],
] );
}
ステップ2:WP-CLIでタームを追加・管理する
# タクソノミーの登録を確認
wp taxonomy list
wp taxonomy get industry --format=json
# タームを追加
wp term create industry "IT・テクノロジー" --slug="it"
wp term create industry "製造業" --slug="manufacturing"
wp term create industry "医療・ヘルスケア" --slug="healthcare" --parent=0
# 子タームを追加(階層型のみ)
wp term create industry "SaaS" --slug="saas" \
--parent=$(wp term get industry it --field=term_id)
# 投稿にタームを設定
wp post term set 123 industry it manufacturing
# タームの一覧を確認
wp term list industry --fields=term_id,name,slug,count --format=table
ステップ3:WP_Term_Queryでタームを取得する
// タクソノミーのタームを取得して表示
$terms = get_terms( [
'taxonomy' => 'industry',
'hide_empty' => false, // 投稿数0のタームも表示
'orderby' => 'name',
'order' => 'ASC',
'parent' => 0, // トップレベルのみ
] );
foreach ( $terms as $term ) {
$link = get_term_link( $term );
$count = $term->count;
echo '<a href="' . esc_url( $link ) . '">'
. esc_html( $term->name )
. ' (' . $count . ')</a>';
}
// 特定タームの投稿を取得
$query = new WP_Query( [
'post_type' => 'case_study',
'tax_query' => [
[
'taxonomy' => 'industry',
'field' => 'slug',
'terms' => [ 'it', 'saas' ],
'operator' => 'IN', // IN / NOT IN / AND
],
],
] );
ステップ4:タクソノミーアーカイブのテンプレートを作成する
テーマに以下のテンプレートファイルを作成:
taxonomy-industry.php → 業種タクソノミーのアーカイブ
taxonomy-industry-it.php → 「IT」タームの専用アーカイブ
taxonomy.php → 汎用タクソノミーアーカイブ
// taxonomy-industry.php
get_header();
$term = get_queried_object(); // 現在のタームオブジェクト
echo '<h1>' . esc_html( $term->name ) . 'の事例一覧</h1>';
echo '<p>' . esc_html( $term->description ) . '</p>';
if ( have_posts() ) :
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/card', 'case_study' );
endwhile;
the_posts_pagination();
endif;
get_footer();
ステップ5:REST APIでタームを取得する
# REST APIでタームを取得
curl https://example.com/wp-json/wp/v2/industry
curl https://example.com/wp-json/wp/v2/industry/5 # ターム ID=5
# 投稿をタームでフィルタリング
curl "https://example.com/wp-json/wp/v2/case-study?industry=5"
// タクソノミーのREST APIフィールドにメタ情報を追加
add_action( 'rest_api_init', function() {
register_rest_field( 'industry', 'icon_url', [
'get_callback' => fn( $term ) => get_term_meta( $term['id'], 'icon_url', true ),
'schema' => [ 'type' => 'string', 'description' => 'アイコンURL' ],
] );
} );
注意事項
register_taxonomy()はregister_post_type()よりも前に呼び出すか、同じinitフックで実行してください。投稿タイプと同時に登録することでinitの優先順位問題を避けられます。show_in_rest => trueを設定しないと、Gutenbergの投稿編集画面にタクソノミーのパネルが表示されません。- タクソノミーのスラッグを後から変更すると、既存のURLが404になります。開発初期に確定させてください。
まとめ
カスタムタクソノミーは「register_taxonomy()登録→WP-CLIでターム追加→テンプレート作成→REST API対応」の流れで実装します。カスタム投稿タイプと組み合わせることで、WordPressを本格的なCMSとして活用できます。関連記事:WordPressでカスタム投稿タイプを登録する方法、WordPressでショートコードを作成する方法。