Wordpress 如何将媒体库网格视图限制为仅显示当前角色有权访问的类别中的文件

Wordpress 如何将媒体库网格视图限制为仅显示当前角色有权访问的类别中的文件,wordpress,media-library,Wordpress,Media Library,我正在构建一个插件,用户只能看到分配给他的用户角色可以访问的类别中的媒体文件 我已经能够在媒体列表视图模式中过滤出结果,当它通过将一个函数挂接到pre_get_posts操作首次加载时,但不知道如何在网格视图模式下执行同样的操作 事情就是这样: User-A被分配给Role-A,该角色可以访问类别Cat-A和Cat-B 当用户A登录到管理员并导航到媒体列表视图页面时,将显示正确的媒体文件,即仅来自Cat-A和Cat-B。但在媒体网格视图模式下,将显示所有媒体文件,而我只希望显示上述两个类别的媒体

我正在构建一个插件,用户只能看到分配给他的用户角色可以访问的类别中的媒体文件

我已经能够在媒体列表视图模式中过滤出结果,当它通过将一个函数挂接到
pre_get_posts
操作首次加载时,但不知道如何在网格视图模式下执行同样的操作

事情就是这样:

User-A
被分配给
Role-A
,该角色可以访问类别
Cat-A
Cat-B

当用户A登录到管理员并导航到媒体列表视图页面时,将显示正确的媒体文件,即仅来自Cat-A和Cat-B。但在媒体网格视图模式下,将显示所有媒体文件,而我只希望显示上述两个类别的媒体

我在网上搜索了StackOverflow中的一些帖子,但没有找到我真正想要的

编辑 经过进一步搜索,我发现:

参考:

既然可以进行上述操作,是否也可以查找附加到每个媒体项的类别,然后创建一个过滤数组,其中包含与给定类别关联的媒体项

比如:

function load_media_library_by_category_access( $query = array() ) {

   // Get an array of category ids, which I already have
   $cat_array = get_category_array_by_role();

   // Modify $query to filter media items by given categories (array may be?)

   return $query;
}

这可能吗?

根据这一点,网格视图是不可能的。您只能操作列表视图的媒体结果。

我终于做到了。我就是这样做的:

function load_media_library_by_category_access( $query = array() ) {

    $cats = $this->get_accessible_categories();

    $tax_query = array(
        array(
            'taxonomy' => 'category',
            'field' => 'id',
            'terms' => $cats,
        ),
    );

    if( !current_user_can( 'update_core' ) ) {
        $query['tax_query'] = $tax_query;
    }

    return $query;
}


add_filter('ajax_query_attachments_args', array($this, 'load_media_library_by_category_access'), 10, 1);
现在,我的媒体网格视图根据当前用户角色有权访问的类别筛选出正确的媒体项

由于
administrator
不需要限制,因此在将
$tax\u查询
过滤器实际注入原始查询之前,我进行了以下检查

if( !current_user_can( 'update_core' ) ) {
    $query['tax_query'] = $tax_query;
}

我想这可能对其他人有帮助。

谢谢您的快速回复!与此同时,我得到了一些看起来很有希望的东西。如果你看我更新的问题和建议,那将是一个很大的帮助@SubrataSarkar表示AJAX钩子只会修改媒体库弹出窗口。哦!这真的很奇怪,为什么他们没有这个网格视图@SubrataSarkar是的很抱歉这不可能。如果你能给我一些帮助你的分数,那就太好了:)嗯,很有趣,我会看一看,但是网上的一切都表明hook不会做你想做的事。。。。
if( !current_user_can( 'update_core' ) ) {
    $query['tax_query'] = $tax_query;
}