【WordPress】カスタムタクソノミーを管理画面に階層付きで表示する方法

【WordPress】カスタムタクソノミーを管理画面に階層付きで表示する方法 WordPress

WordPressでは、カテゴリのように階層構造を持つタクソノミーを自由に作成できます。しかし、カスタムタクソノミーを管理画面で使う場合、階層がうまく表示されない・扱いにくいといった問題が起こることもあります。本記事では、カスタムタクソノミーを階層付きで表示する方法と、管理画面で見やすく扱うためのポイントを解説します。

スポンサーリンク

カスタムタクソノミーを階層構造で登録する

まず、タクソノミーを階層型(親子構造あり)で登録するには、register_taxonomy()関数で’hierarchical’ => trueを指定する必要があります。

functions.php:階層型タクソノミーの登録
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が有効になっていることで、meta_box_cbを明示的に指定していなければ既定のチェックボックスUIが自動で使われます。

一方、投稿一覧の「クイック編集」でもタクソノミーを編集したい場合は、別途show_in_quick_editを有効にする必要があります(編集画面本体のツリー表示とは別の機能です)。

また、タクソノミーを左側のメニューに独立して表示したい場合は、’show_in_menu’ => trueを指定することで管理しやすくなります。

‘show_in_menu’・’show_in_quick_edit’の追加設定
'show_in_menu' => true,
'show_in_quick_edit' => true,

管理画面のカラムにタクソノミーを追加する

投稿一覧にタクソノミーの名称を表示することも可能です。以下のようにカラムを追加します(絞り込み用のフィルタードロップダウンではなく、一覧に値を表示するための実装です)。

functions.php:カラムの追加と表示
// カラム追加
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フィルターでチェックリストの出力をカスタマイズすることも可能です。

wp_terms_checklist_argsはブロックエディタでは効果がない
wp_terms_checklist_argsフィルター(WordPress 3.4で導入)は、クラシックエディタのチェックボックスツリー(メタボックス)にのみ有効です。WordPress 5.0以降のブロックエディタ(Gutenberg)のタクソノミーパネルはReactで独自に実装されているため、このフィルターでカスタムWalkerを指定しても出力には反映されません。

関連記事

よくある質問(FAQ)

Qregister_taxonomy()で階層型タクソノミーを作成するには?
Ahierarchical=trueを設定します。これによりカテゴリーのような親子関係を持つタクソノミーが作成されます。hierarchical=falseはタグのようなフラットな構造になります。
Qカスタムタクソノミーの管理画面をカテゴリーUIに近づけるには?
Aregister_taxonomy()のshow_ui=true・show_in_menu=true・query_var=trueを設定します。meta_box_cbはnullでデフォルトのチェックボックスUIが使われ、falseでメタボックスを非表示にします。
Qカスタムタクソノミーのタームを入れ子で表示するウォーカーはありますか?
Awp_list_categories()のwalkerパラメーターにWalker_Categoryの拡張クラスを渡すか、get_terms()で全タームを取得して自前で再帰的に表示する実装が一般的です。

まとめ

カスタムタクソノミーを階層付きで登録し、管理画面で使いやすく表示させることで、分類の粒度を細かくコントロールできるようになります。カテゴリー以外にも業種・地域・タイプなど、柔軟な分類が可能になるので、CMSとしてのWordPressをより活用したい場合におすすめです。

運用効率を上げるためにも、適切にツリー表示とUIカスタマイズを行いましょう。