如何获取具有或不具有特定功能的用户角色数组?

时间:2017-02-15 作者:Adriano Monecchi

虽然这似乎是一项愚蠢的任务,但我无法找到一种方法来获取所有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 表,这让我想到是否有可能执行数据库查询以获得这些结果?

任何投入都值得赞赏。

1 个回复
最合适的回答,由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 阵列的。