カスタムタクソノミーを登録!register_taxonomyについて詳細に解説【具体例あり】

Featured image of the post

概要

プラグインを使わずfunctions.phpだけでカスタムタクソノミーを追加することができる関数。

カスタムタクソノミーについては以下の記事を参照。

📄 WordPressのカスタムタクソノミーとは?使い方と導入方法を詳しく解説!

プラグインとの使い分け

プラグイン「Custom Post Type UI」を使えば、register_post_typeを使わなくてもカスタムタクソノミーを追加できる。

プラグインがおすすめの場面
  • カスタム投稿タイプですでに「Custom Post Type UI」を使っている
  • 簡単に実装したい🔰
  • プラグインを増やすことに抵抗がない

register_post_typeがおすすめの場面
  • ある程度WordPressに詳しい
  • プラグインを増やしたくない

🚫 ただいま記事作成中です💭

関数の説明

引数・戻り値
register_taxonomy( $taxonomy, $object_type, $args );

引数
Name 説明 初期値
$taxonomy string 登録したいタクソノミー名。
最大 32 文字、英小文字とアンダースコアのみ。
なし
$object_type array,string タクソノミーが属する投稿タイプ名。
(投稿ならpost、カスタム投稿タイプならその名前を指定する。)
なし
$args(任意) array,string タクソノミーの設定。 なし

【補足】第三引数$argsの詳細
  • カスタムタクソノミーの細かい設定ができる。

よく使う設定

キー 説明 初期値
public bool カスタムタクソノミーを有効にするか。trueにしないと使えない。 true
label string 管理画面などで表示するタクソノミーの名称。日本語でもOK。
labels->nameで上書きされる。
labels->name
labels array 「管理画面に表示される言葉」を細かく設定できる。※1 カテゴリーまたはタグと同じ言葉になる。(hierarchicalがtrueならカテゴリーの言葉が採用される)
description string カスタムタクソノミーの説明文。 ‘’
hierarchical bool タクソノミー同士で親子関係を持たせられるようにするか。(例えばタグはfalse、カテゴリーはtrueになっている。) false
show_in_rest bool ブロックエディタで設定可能にする。(trueのときはカスタムタクソノミーをREST APIに含まれる) false

あまり使わない設定

キー 説明 初期値
show_ui bool 管理画面でカスタムタクソノミー管理ページを表示するか。 publicと同じ
show_in_nav_menus bool ナビゲーションメニューにカスタムタクソノミーを表示するか。 publicと同じ
show_tagcloud bool タグクラウドのウィジェットでこのタクソノミーを使うか。 show_uiと同じ
show_in_quick_edit bool クイック編集画面に表示するか。 show_uiと同じ
meta_box_cb callback 編集ページにメタボックスを追加/削除するときに使う。メタボックスを追加/削除する処理(add_meta_box/remove_meta_box)を使った処理をコールバック関数に指定する。
※falseにすると非表示になる。
null
階層のあるタクソノミーならカテゴリー用メタボックス。階層化しないタクソノミーならタグ用メタボックスになる。
show_admin_column bool [投稿一覧]画面にタクソノミーの列を追加する。 false
update_count_callback string 第二引数$object_typeの投稿タイプの個数が更新されたときに呼ばれる関数名。 ‘’
query_var bool,string タクソノミーをクエリパラメータで指定できるようにする。クエリパラメータが不要な場合はfalse。 true(example.com/カスタム投稿タイプ名/?タクソノミー名=ターム名でアクセス可能になる)
rewrite bool,array カスタムタクソノミーのパーマリンク構造を変更する。
※変更後に[設定−パーマリンク]で変更の保存をしないと反映されない。
true(パーマリンクは$post_type/スラッグ
capabilities array カスタムタクソノミーを操作できる権限。 なし
sort bool 投稿にタームを設定した順序を記憶しておくかどうか。 なし

※1:labelsの設定内容

Image in a image block

詳細は以下の公式ドキュメントを参照。

戻り値

なし

使用例

投稿にカスタムタクソノミー[商品]を追加する

function custom_taxonomy() {
  $args = array(
      'labels' => array(   // 管理画面に表示される名称
          'name' => '商品',
          'singular_name' => '商品',
      ),
      'public' => true,    // カスタムタクソノミーを有効にする
  );
  // [投稿]にカスタムタクソノミーを登録
  register_taxonomy( 'item', 'post', $args );
}
add_action( 'init', 'custom_taxonomy' );
Image in a image block

解説
  • function custom_taxonomy()
    • カスタムタクソノミーを登録する関数
    • register_taxonomy( '商品', 'post', $args );で登録する。
    • 詳細な情報は$argsで設定
  • add_action( 'init', 'custom_taxonomy' );
    • アクションフックinitにカスタムタクソノミー登録処理を追加する。

関連記事

🚫 ただいま記事作成中です💭

実践的な例

カスタム投稿タイプにカスタムタクソノミー[商品]を追加する

function custom_taxonomy() {
  // 管理画面で表示される名称
  $labels = array(
      'name'              => '商品',            // タクソノミーの名前(複数形)
      'singular_name'     => '商品',            // タクソノミーの名前(単数形)
      'search_items'      => '商品を検索',       // タクソノミーを検索するときのラベル
      'popular_items'     => 'よく使われている商品',  // 人気のタクソノミーのラベル
      'all_items'         => 'すべての商品',    // タクソノミーの一覧画面のラベル
      'parent_item'       => '親の商品',        // 親タクソノミーのラベル
      'parent_item_colon' => '親の商品:',       // 親タクソノミーのラベル(コロン付き)
      'edit_item'         => '商品を編集',      // タクソノミーの編集画面のラベル
      'update_item'       => '商品を更新',      // タクソノミーの更新画面のラベル
      'add_new_item'      => '新しい商品を追加', // タクソノミーの追加画面のラベル
      'new_item_name'     => '新しい商品',      // 新しいタクソノミーの名前を入力するときのラベル
      'menu_name'         => '商品'           // 管理画面のメニューに表示されるタクソノミーの名前
  );
  
  // タクソノミーの設定を定義する配列
  $args = array(
      'labels'            => $labels, // 管理画面で表示されるラベルの配列
      'public'            => true, // 投稿の編集画面でタクソノミーの選択ができるようにする
      'hierarchical'      => true, // 親子関係のあるタクソノミーにする
      'show_ui'           => true, // 管理画面でタクソノミーの選択を表示する
      'show_admin_column' => true, // カスタム投稿の一覧画面でタクソノミーの列を表示する
      'query_var'         => true, // タクソノミーをクエリに含める
      'rewrite'           => array( 'slug' => 'item' ) // タクソノミーのパーマリンクを設定する配列
  );

  register_taxonomy( 'item', 'product', $args );
}
add_action( 'init', 'custom_taxonomy', 0 );

参考サイト