WordPressでは、メディアライブラリにアップロードされた画像やPDFなどのファイルを一括管理できますが、標準では「すべてのメディアアイテム」「画像」「未添付」などの基本的なフィルターしか用意されていません。大量のメディアファイルを扱うサイトでは、これだけでは管理しづらい場合があります。
この記事では、メディアライブラリに独自の分類(カスタムタクソノミー)を追加し、管理画面での絞り込みに対応させる方法を紹介します。
カスタムタクソノミーを「attachment」タイプに追加する
まずは、メディア(添付ファイル)に対応したカスタムタクソノミーを登録します。functions.phpに以下のコードを追加してください。
function add_media_taxonomy() {
register_taxonomy(
'media_category',
'attachment',
array(
'label' => 'メディア分類',
'public' => false,
'hierarchical' => true,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => false,
)
);
}
add_action('init', 'add_media_taxonomy');
このコードにより、「メディア分類」というカスタムタクソノミーが作成され、管理画面のメディア詳細編集画面でも設定可能になります。
メディアライブラリにフィルター項目を追加する
次に、メディアライブラリ(リスト表示時)で「メディア分類」での絞り込みができるように、ドロップダウンフィルターを追加します。
function add_media_category_filter() {
global $typenow;
if ($typenow !== 'attachment') {
return;
}
$taxonomy = 'media_category';
$selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
$info_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => esc_html($info_taxonomy->labels->all_items),
'taxonomy' => $taxonomy,
'name' => $taxonomy,
'orderby' => 'name',
'selected' => $selected,
'hierarchical' => true,
'depth' => 3,
'show_count' => false,
'hide_empty' => true,
));
}
add_action('restrict_manage_posts', 'add_media_category_filter');
この処理により、メディアライブラリ上部に「メディア分類」のドロップダウンが表示され、分類によるフィルタリングが可能になります。
フィルターが有効になるようにクエリを調整する
最後に、ドロップダウンで選択された分類が有効になるように、クエリの調整処理を追加します。
function convert_media_category_query($query) {
global $pagenow;
if (
isset($_GET['media_category']) &&
is_admin() &&
$pagenow === 'upload.php'
) {
$term = sanitize_text_field($_GET['media_category']);
$query->set('tax_query', array(
array(
'taxonomy' => 'media_category',
'field' => 'term_id',
'terms' => $term,
)
));
}
}
add_action('pre_get_posts', 'convert_media_category_query');
これで、選択された「メディア分類」に基づいて、表示されるメディアが自動的に絞り込まれるようになります。
まとめ
メディアライブラリに独自の分類フィルターを追加することで、管理画面でのメディア整理が格段に効率化されます。とくに企業サイトやメディア運営など、画像・PDF・資料などを多く扱う場面では大きな効果を発揮します。
必要に応じて、分類を細分化したり、メディアアップローダーとの連携を強化することも可能です。ぜひカスタマイズに活用してみてください。