【wordpress】给媒体库添加分类管理并加入筛选

代码效果:

这是达成的效果

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');
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值