You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress:针对特定自定义用户角色实现媒体库访问权限进阶控制

实现自定义角色的媒体库访问权限进阶需求

当然可以实现这个需求!我们只需要在原有代码的基础上扩展逻辑,针对自定义角色A和B的权限做特殊处理就行。我给你整理了一段扩展后的代码,你可以直接放到主题的functions.php文件里(或者用自定义功能插件/代码片段工具添加,避免主题更新丢失代码):

add_filter('ajax_query_attachments_args', 'custom_role_library_permission');
function custom_role_library_permission($query) {
    $user_id = get_current_user_id();
    
    // 未登录用户或拥有高权限的用户(比如管理员),保持原有访问权限
    if (!$user_id || current_user_can('activate_plugins') || current_user_can('edit_others_posts')) {
        return $query;
    }
    
    $current_user = wp_get_current_user();
    $allowed_author_ids = array($user_id); // 默认仅能查看自己上传的文件
    
    // 处理角色A的权限:可查看所有角色A成员的媒体文件
    if (in_array('role_a_slug', $current_user->roles)) {
        $role_a_users = get_users(array('role' => 'role_a_slug', 'fields' => 'ID'));
        $allowed_author_ids = array_merge($allowed_author_ids, $role_a_users);
        $allowed_author_ids = array_unique($allowed_author_ids); // 去重,避免重复添加自身ID
    }
    
    // 处理角色B的权限:可查看角色A + 角色B所有成员的媒体文件
    if (in_array('role_b_slug', $current_user->roles)) {
        $role_a_users = get_users(array('role' => 'role_a_slug', 'fields' => 'ID'));
        $role_b_users = get_users(array('role' => 'role_b_slug', 'fields' => 'ID'));
        $allowed_author_ids = array_merge($allowed_author_ids, $role_a_users, $role_b_users);
        $allowed_author_ids = array_unique($allowed_author_ids);
    }
    
    // 设置查询条件,仅显示允许的作者上传的媒体文件
    $query['author__in'] = $allowed_author_ids;
    
    return $query;
}

关键说明

  1. 替换角色Slug:记得把代码里的role_a_slug和role_b_slug替换成你实际创建的自定义角色的标识符(不是角色的显示名称,比如你创建角色时设置的role_a这种slug)。
  2. 权限逻辑:
    • 高权限用户(拥有activate_plugins或edit_others_posts权限)依旧可以查看所有媒体文件;
    • 普通用户默认只能看自己的文件;
    • 角色A用户能看到所有同角色成员的文件;
    • 角色B用户能看到角色A + 自身角色所有成员的文件。
  3. 测试建议:切换不同角色的用户账号,验证媒体库的显示内容是否符合预期,确保没有权限遗漏。

内容的提问来源于stack exchange,提问作者Polo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:24:09