登録したカスタムタクソノミーのメタボックスが表示されなかった話

登録したカスタムタクソノミーのメタボックスが表示されなかった話

「Wordpressでカテゴリーやタグとは別に、タグの機能を持ったものって付け加えることができますか?」といった相談を受けました。

WordPressは、カスタムタクソノミー(カスタム分類)というカテゴリーやタグに相当するものを新たに作成することができるようになっています。

そのカスタムタクソノミーを新規で追加してやれば解決と思ったのですが…

目次

register_taxonomyで追加

WordPressには、カテゴリーやタグ以外にカスタムタクソノミー(カスタム分類)を追加できるだけでなく、固定ページや投稿ページ以外のカスタム投稿を追加できるようになっています。

「Custom Post Type UI」というプラグインを使用すれば、カスタム投稿もカスタムタクソノミーも設定することができるのですが、カスタマイズのご依頼主は、あまりプラグインを利用しないという方針でサイトを運営していました。

ということで、functions.phpへ追記してカスタムタクソノミーを作成していきます。

function add_custom_taxonomy(){
  $labels = array(
    'name' => 'ジャンル',
    'singular_name' => 'ジャンル',
    'search_items' => 'ジャンルの検索',
    'popular_items' => '人気のジャンル',
    'all_items' => 'すべてのジャンル',
    'parent_item' => '親のジャンル',
    'parent_item_colon' => '親のジャンル:',
    'edit_item' => 'ジャンルの編集',
    'view_item' => 'ジャンルの表示',
    'update_item' => 'ジャンルの更新',
    'add_new_item' => 'ジャンルの追加',
    'new_item_name' => '新しいジャンルの名前',
    'separate_items_with_commas' => 'ジャンルをコンマで区切ってください',
    'add_or_remove_items' => 'ジャンルの追加または削除',
    'choose_from_most_used' => 'よく使われるジャンルから選択',
    'not_found' => 'ジャンルがありません',
    'no_terms' => 'ジャンルなし',
    'items_list_navigation' => 'ジャンル一覧ナビゲーション',
    'items_list' => 'ジャンル一覧',
    'most_used' => 'よく使われるジャンル',
    'back_to_items' => 'ジャンルを戻す',
  );

  $args = array(
    'labels' => $labels,
    'description' => 'ジャンル',
    'public' => true,
    'hierarchical' => false,
    'show_ui' => true,
    'show_admin_column' => true,
    'meta_box_cb' => true,
    'rewrite' => array('slug' => 'genre'),
    'query_var' => true,
  );

  register_taxonomy('genre','post',$args);
}
add_action('init','add_custom_taxonomy');

自分で運営しているブログ等であれば$labelsのキーはここまで指定しませんが、極力使用しやすいようにということで、ほぼフルでキーを指定しております。

そして、$argsにオプション内容を格納し、register_taxonomy()の第三引数として渡してやります。

投稿編集画面にメタボックスが表示されない

これで完了と思い、投稿編集画面を確認したのですが、新規で作成したカスタムタクソノミーのメタボックスが表示されていません。

メタボックスが表示されていない
メタボックスが表示されていない

何か設定し忘れてたのかと調べてみると、$argsで指定しているオプションにshow_in_restが抜けていることが判明しました。

このオプションは「REST API」として使用可能にするかどうかという設定だけだと思っていたのですが、このオプションを「true」にすることでメタボックスが無事に表示されました。

無事にメタボックスが表示
無事にメタボックスが表示

$argsの部分は以下のように変更しました。

$args = array(
    'labels' => $labels,
    'description' => 'ジャンル',
    'public' => true,
    'hierarchical' => false,
    'show_ui' => true,
    'show_admin_column' => true,
    'show_in_rest' => true,
    'meta_box_cb' => true,
    'rewrite' => array('slug' => 'genre'),
    'query_var' => true,
  );

show_in_rest => trueを追加することでメタボックスが表示されるようになります。あとは、カテゴリー・タグ・カスタムタクソノミーを含めた検索関連のカスタマイズですが、それはまた別の機会で。