カスタムタクソノミーを使って
■ CODE 1
$labels = array( 'name' => 'カラー', 'singular_name' => 'カラー', 'search_items' => '色で探す', 'all_items' => '全ての色', 'parent_item' => '親色', 'parent_item_colon' => '親の色', 'edit_item' => 'カラーの編集', 'update_item' => 'カラーを更新', 'add_new_item' => 'カラーを追加', 'new_item_name' => '新規カラー名', ); register_taxonomy( 'color', array( 'attachment' ), array( 'hierarchical' => true, 'labels' => $labels, 'query_var' => true, 'rewrite' => array( 'slug' => 'color', 'hierarchical' => true, 'with_front' => false ), ) );
と記述すると、メディアのカテゴライズを行うことができるようになります。
ただし、投稿、ページ、カスタム投稿タイプと異なり、メディアの場合は、show_ui パラメータが true になっていても、管理画面のメニューにはタクソノミーのメニューが表示されません。
「入力段階でタイプミスをして不要なタクソノミーを削除したい」、「スラッグを変更したい」などなど、やはり編集したいと思うのは常だと思います。
ただし、メディアのタクソノミーも編集ページ自体が存在していないわけではなく、
http://www.example.com/wp-admin/edit-tags.php?taxonomy=color
へアクセスすると、タクソノミーの管理画面が表示されることが分かります。
つまり、あとはメディアメニュー内にタクソノミー名と編集ページへのリンクが設置できれば、メディアのタクソノミーも修正などを自由に行うことで出来るようになるのです。
通常、サブメニューの追加は、add_submenu_page
関数を使いますが、このケースでは、コールバックで呼ばれる関数が存在しないため利用できません。
そこで、WordPressの管理画面メニューが $menu, $submenu というグローバル変数で管理されていることを利用して、この変数に直接メニューのデータを追加してしまうようにします。
CODE 2 をfunctions.php に貼り付けすれば、右図のように、メディアだけのタクソノミーがメディアメニュー内に追加されるようになります。
■ CODE 2
function add_media_taxonomy_menu() { global $wp_taxonomies, $submenu; $media_taxonomies = array(); if ( $wp_taxonomies ) { foreach ( $wp_taxonomies as $key => $obj ) { if ( count( $obj->object_type ) == 1 && $obj->object_type[0] == 'attachment' && $obj->show_ui ) { $media_taxonomies[$key] = $obj; } } } if ( $media_taxonomies ) { $priority = 50; foreach ( $media_taxonomies as $key => $media_taxonomy ) { if ( current_user_can( $media_taxonomy->cap->manage_terms ) ) { $submenu['upload.php'][$priority] = array( $media_taxonomy->labels->menu_name, 'upload_files', 'edit-tags.php?taxonomy=' . $key ); $priority += 5; } } } } add_action( 'admin_menu', 'add_media_taxonomy_menu' );
後半は、メディアの編集ページのカスタマイズを紹介予定です。
「メディアのカテゴライズ(前編)」への1件のフィードバック