代码效果:
1. 注册媒体库分类
function register_media_category_taxonomy() {
$labels = array(
'name' => 'Media Categories',
'singular_name' => 'Media Category',
'search_items' => 'Search Media Categories',
'all_items' => 'All Media Categories',
'parent_item' => 'Parent Media Category',
'parent_item_colon' => 'Parent Media Category:',
'edit_item' => 'Edit Media Category',
'update_item' => 'Update Media Category',
'add_new_item' => 'Add New Media Category',
'new_item_name' => 'New Media Category Name',
'menu_name' => 'Media Category',
);
$args = array(
'hierarchical' => true, // true = categories, false = tags
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'media_category'),
);
register_taxonomy('media_category', array('attachment'), $args);
}
// 注册媒体库分类
add_action('init', 'register_media_category_taxonomy');
2. 添加分类筛选到媒体库
function media_category_filter_to_media_library($post_type, $which) {
// 应用于附件
if ('attachment' !== $post_type) {
return;
}
// 设置您的分类法名称
$taxonomy = 'media_category';
// 检索分类法信息
$tax_obj = get_taxonomy($taxonomy);
// 检索分类项
$terms = get_terms($taxonomy, array('hide_empty' => false));
// 下拉菜单
echo "<select name='{$taxonomy}' id='{$taxonomy}' class='postform'>";
echo '<option value="">所有 ' . $tax_obj->label . '</option>';
foreach ($terms as $term) {
// 检查当前请求是否有该分类筛选
printf(
'<option value="%s"%s>%s (%s)</option>',
esc_attr($term->slug),
((isset($_REQUEST[$taxonomy]) && $_REQUEST[$taxonomy] === $term->slug) ? ' selected="selected"' : ''),
esc_html($term->name),
esc_html($term->count)
);
}
echo '</select>';
}
add_action('restrict_manage_posts', 'media_category_filter_to_media_library', 10, 2);
3.添加筛选分类到预查询动作中
在第二步的操作只是把select的样式添加到页面,实际上选择分类并没有筛选的效果,所以还需要添加到预查询动作中
function media_category_filter_query($query) {
// 仅在后台运行
if (!is_admin()) {
return;
}
// 获取当前的WordPress全局变量对象
global $pagenow;
// 检查是否在媒体库页面
if ('upload.php' === $pagenow) {
$taxonomy = 'media_category';
$term = isset($_REQUEST[$taxonomy]) ? $_REQUEST[$taxonomy] : '';
if (!empty($term)) {
// 设置查询变量为我们的分类
$query->set('tax_query', array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $term
)
));
}
}
}
add_action('pre_get_posts', 'media_category_filter_query');