WordPressで非階層タクソノミーをチェックボックス形式で扱う方法【開発者向けTips】

WordPressでカスタム投稿タイプを構築する際、「タグのように扱いたいけれど、
管理画面ではチェックボックスで選べた方が便利だな」と思ったことはありませんか?

実は、非階層型タクソノミー(タグ形式)でも、
ちょっとした工夫でカテゴリのようなチェックボックス表示に変更することができます。

この記事では、WordPress開発者向けに、

  • 非階層型タクソノミーをチェックボックス形式にする方法
  • クラシックエディターでの管理画面調整
  • よくあるつまずきポイント
    をまとめて解説します。

なぜ「非階層タクソノミー」でもチェックボックス表示にしたいのか?

WordPressのタクソノミーには大きく2種類あります

種類表示例UI(管理画面)
階層型(例:カテゴリ)親子関係があるチェックボックス
非階層型(例:タグ)フラットな単語の羅列入力フィールド+カンマ区切り

一般的には、非階層型は入力ボックスで管理されますが、
「カテゴリーのように、一覧から複数選べるUIにしたい」というニーズも多くあります。

カスタム投稿タイプとタクソノミーの定義

まずは、カスタム投稿タイプとタクソノミーを登録するコードです。
以下は functions.php に記述するサンプルです:

// カスタム投稿タイプの登録
function create_custom_post_type() {
register_post_type('example_post', [
'labels' => [
'name' => '事例',
'singular_name' => '事例'
],
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail'],
'menu_icon' => 'dashicons-portfolio',
'show_in_rest' => false, // Gutenberg非対応(クラシックに)
'rewrite' => ['slug' => 'example'],
]);
}
add_action('init', 'create_custom_post_type');

続いて、非階層型のタクソノミー(例:年齢層、性別、担当者など)を登録します。

// 非階層型タクソノミー(年齢層)の登録
register_taxonomy('example_age', 'example_post', [
'label' => '年齢層',
'hierarchical' => false, // ← 非階層(タグ形式)
'public' => true,
'show_in_rest' => false,
]);

このままだと、入力フィールド(タグ形式)で表示されてしまいます。
次に、チェックボックス形式に切り替える処理を追加します。

管理画面で「チェックボックス形式」に切り替えるコード

以下のフィルターフックを使えば、非階層型でもチェックボックス表示になります。

// 管理画面で非階層タクソノミーをチェックボックスで表示
add_filter('taxonomy_meta_box_sanitize_cb', function($callback, $meta_box_id) {
$custom_taxonomies = [
'example_age', // ← ここに対象のタクソノミー名を追加
'example_gender',
'example_staff'
];

if (in_array($meta_box_id, $custom_taxonomies, true)) {
return 'taxonomy_meta_box_sanitize_cb_checkboxes';
}

return $callback;
}, 10, 2);

管理画面でチェックボックスUIになるとこう変わる

変更前(デフォルト)

  • 入力ボックスにタグ名を手打ち or 予測入力
  • 表記揺れのリスクあり
  • 管理しづらい

変更後(チェックボックス)

  • 一覧から簡単に複数選択可能
  • 表記統一しやすい
  • 入力ミスが減る

実際の管理画面では、カテゴリのようにチェックボックスUIで表示されるようになります。

Gutenbergではなくクラシックエディターにしたい場合

投稿画面をブロックエディター(Gutenberg)ではなく、クラシックエディターで開きたい場合は以下のように指定します:

// 指定の投稿タイプだけクラシックエディターに
add_filter('use_block_editor_for_post_type', function ($use_block_editor, $post_type) {
return $post_type === 'example_post' ? false : $use_block_editor;
}, 10, 2);

よくあるトラブルと解決法

症状原因解決策
チェックボックスにならないhierarchical => false のままOK(フィルターで制御できる)
UIが反映されないキャッシュ or コードが反映されてない管理画面再読み込み・コードチェック
Gutenbergで出ないshow_in_rest => false になっていないREST APIを無効にしてクラシック化

まとめ

WordPressでは、非階層型のタクソノミーでも工夫次第で扱いやすいUIに変更できます。
特に、事例紹介・症例投稿・FAQ管理などの構造化された投稿では、
入力ミスを減らし、管理のしやすさを保つためにも、チェックボックス表示は非常に有効です。

ぜひ、あなたのWordPressサイトでも取り入れてみてください!