メディアのカテゴライズ(前編)

カスタムタクソノミーを使って

■ 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件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です