WordPressでは、カテゴリのように階層構造を持つタクソノミーを自由に作成できます。しかし、カスタムタクソノミーを管理画面で使う場合、階層がうまく表示されない・扱いにくいといった問題が起こることもあります。本記事では、カスタムタクソノミーを階層付きで表示する方法と、管理画面で見やすく扱うためのポイントを解説します。
カスタムタクソノミーを階層構造で登録する
まず、タクソノミーを階層型(親子構造あり)で登録するには、register_taxonomy()
関数で'hierarchical' => true
を指定する必要があります。
function register_custom_taxonomy() {
register_taxonomy('genre', 'post', array(
'label' => 'ジャンル',
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => array('slug' => 'genre'),
));
}
add_action('init', 'register_custom_taxonomy');
'hierarchical' => true
を指定することで、カテゴリと同様に親子関係を持たせることができます。
管理画面の投稿編集画面でツリー表示させる
階層型のタクソノミーであれば、投稿編集画面では自動的にカテゴリと同じようなチェックボックスツリーが表示されます。ただし、'show_ui'
と'show_in_quick_edit'
が有効になっている必要があります。
また、タクソノミーを左側のメニューに独立して表示したい場合は、'show_in_menu' => true
を指定することで管理しやすくなります。
'show_in_menu' => true,
'show_in_quick_edit' => true,
管理画面のカラムにタクソノミーを追加する
投稿一覧にタクソノミーの名称を表示して、フィルタ機能を追加することも可能です。以下のようにフィルターとカラムを追加します。
// カラム追加
function add_genre_column($columns) {
$columns['genre'] = 'ジャンル';
return $columns;
}
add_filter('manage_post_posts_columns', 'add_genre_column');
// カラムの値表示
function show_genre_column($column_name, $post_id) {
if ($column_name === 'genre') {
$terms = get_the_term_list($post_id, 'genre', '', ', ');
echo $terms ? $terms : '—';
}
}
add_action('manage_post_posts_custom_column', 'show_genre_column', 10, 2);
階層がうまく表示されない場合の対処法
タクソノミーの登録は正しいのに、管理画面で親子関係が崩れて見えるケースがあります。以下の点を確認しましょう。
'hierarchical' => true
が設定されているか'show_ui' => true
が有効か- タームの編集画面で親カテゴリ(親ターム)を正しく設定しているか
また、タームの並び順を管理したい場合は、wp_terms_checklist_args
フィルターでチェックリストの出力をカスタマイズすることも可能です。
まとめ
カスタムタクソノミーを階層付きで登録し、管理画面で使いやすく表示させることで、分類の粒度を細かくコントロールできるようになります。カテゴリー以外にも業種・地域・タイプなど、柔軟な分類が可能になるので、CMSとしてのWordPressをより活用したい場合におすすめです。
運用効率を上げるためにも、適切にツリー表示とUIカスタマイズを行いましょう。