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; }
关键说明
- 替换角色Slug:记得把代码里的
role_a_slug和role_b_slug替换成你实际创建的自定义角色的标识符(不是角色的显示名称,比如你创建角色时设置的role_a这种slug)。 - 权限逻辑:
- 高权限用户(拥有
activate_plugins或edit_others_posts权限)依旧可以查看所有媒体文件; - 普通用户默认只能看自己的文件;
- 角色A用户能看到所有同角色成员的文件;
- 角色B用户能看到角色A + 自身角色所有成员的文件。
- 高权限用户(拥有
- 测试建议:切换不同角色的用户账号,验证媒体库的显示内容是否符合预期,确保没有权限遗漏。
内容的提问来源于stack exchange,提问作者Polo
相关产品推荐
相关产品推荐

