WordPressでカスタムタクソノミーを追加したとき、投稿画面で表示されるメタボックスは次の2種類を選ぶことができます。
- チェックボックスタイプ(カテゴリーと同じ)
- テキスト入力タイプ(タグと同じ)
これらの切り替えはregister_taxonomy()
に設定するhierarchical
パラメータ(タクソノミーの階層化を指定)によって切り替わります。
この動作はクラシックエディタでもブロックエディタ(Gutenberg)でも同じです。特にブロックエディタ(Gutenberg)ではこの方法でしか切り替えることができません。
例えば、次のようなコードで登録するとチェックボックスタイプになります。(無名関数にしていろいろなパラメータも省略しています)
add_action( 'init', function () {
register_taxonomy(
'hoge_taxonmy',
'post',
array(
'label' => 'hogehoge',
'hierarchical'=>true,
)
);
} );
次のようにhierarchical
をfalse
にするとテキストタイプになります。
add_action( 'init', function () {
register_taxonomy(
'hoge_taxonmy',
'post',
array(
'label' => 'hogehoge',
'hierarchical'=>false,
)
);
} );
これで解決と言いたいところですが、実務では「階層化したくないけどチェックボックスにしたい」というケースもあります。
そういうときのためにregister_taxonomy()
にはUIを切り替えるmeta_box_cb
というパラメータが用意されています。次のように指定することでhierarchical
の設定とは関係なくUIをチェックボックスにすることができます。
add_action( 'init', function () {
register_taxonomy(
'hoge_taxonmy',
'post',
array(
'label' => 'hogehoge',
'hierarchical'=>false,
'meta_box_cb' => 'post_categories_meta_box'
)
);
} );
逆にテキストタイプにするパラメータもあります。
add_action( 'init', function () {
register_taxonomy(
'hoge_taxonmy',
'post',
array(
'label' => 'hogehoge',
'hierarchical'=>true,
'meta_box_cb' => 'post_tags_meta_box'
)
);
} );
これはとても便利ですが、残念ながらブロックエディタ(Gutenberg)ではこの設定は無視されてしまいます。この問題はIssueとして挙げられているようですがこの記事を書いている時点(2020年11月2日)では対応されていません。
meta_box_cb parameter doesn’t work on Post · Issue #13816 · WordPress/gutenberg · GitHub
ブロックエディタでは階層化したくなくてもhierarchical
をtrue
にするしか解決方法はないようです。
個人的にはタグのテキストを入力するUIは非常に使いにくいのでチェックボックスタイプに統一して欲しいぐらいなんでけどね…
テキスト入力だと間違って同じような名前のタグを無駄に登録する原因になると思うのは私だけかな??
コメント
この記事へのコメントはありません。