虽然这似乎是一项愚蠢的任务,但我无法找到一种方法来获取所有WordPress的数组user roles 没有特定功能。
使用下面的函数,我可以获得所有可用的用户角色,但如何筛选这些角色,以便只返回具有或不具有特定功能的用户角色,比如upload_files
能力?这可行吗?
function get_roles_that_cant_upload_files() {
global $wp_roles;
if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles();
$available_roles = array();
$available_roles = $wp_roles->get_names();
return $available_roles;
}
我在WordPress文档和web上到处搜索合适的WP核心功能,它似乎不存在,甚至没有过滤器。
我希望只获得用户角色,而不需要upload_files
能力。这样,我会使用它在插件选项中输入一个select字段,然后为所选的用户角色设置另一个功能。
我不是一个开发人员,所以我尝试了一些“黑客”,但没有成功。用户功能似乎存储在wp_options
表,这让我想到是否有可能执行数据库查询以获得这些结果?
任何投入都值得赞赏。
最合适的回答,由SO网友:David Lee 整理而成
尝试以下操作:
function get_roles_that_cant($capability) {
global $wp_roles;
if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles();
$available_roles_names = $wp_roles->get_names();//we get all roles names
$available_roles_capable = array();
foreach ($available_roles_names as $role_key => $role_name) { //we iterate all the names
$role_object = get_role( $role_key );//we get the Role Object
$array_of_capabilities = $role_object->capabilities;//we get the array of capabilities for this role
if(!isset($array_of_capabilities[$capability]) || $array_of_capabilities[$capability] == 0){ //we check if the upload_files capability is present, and if its present check if its 0 (FALSE in Php)
$available_roles_capable[$role_key] = $role_name; //we populate the array of capable roles
}
}
return $available_roles_capable;
}
我使用函数并添加逻辑来获取rol对象,获取该对象的所有功能,并检查rol是否具有该功能,我还将其设置为通用,以便您可以发送
capability 要检查,请按如下方式使用:
get_roles_that_cant(\'upload_files\');
它将返回如下数组:
Array
(
[contributor] => Contributor
[subscriber] => Subscriber
)
因此,您可以使用
$key
使用
$value
阵列的。