获取WordPress网站上当前可用角色的列表?


38

编写WordPress插件时,通常需要设置选项,以便网站上的角色可以访问某些功能或内容。为此,插件开发人员需要获取该站点上存在的角色列表,以在该选项中使用。因为可以创建自定义角色,所以我们不能假设默认角色是唯一可用的角色。

提取列表的最佳方法是什么?


6
注意:这个问题最初是Ryan Bilesky在wp-hackers邮件列表上提出的,并由我回答。我在这里添加它是因为这是人们可能会问Google的最佳实践问题的一个明显案例:)
jerclarke 2010年

1
@杰里米·克拉克Jeremy Clarke) -非常高兴您的参与,而这些正是我们在此寻找的东西;与常见问题相关的答案也可以揭示最佳实践。荣誉!
MikeSchinkel 2010年

Answers:


47

角色存储在全局变量中$wp_roles

理想的功能是get_editable_roles()/wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

“编辑”部分是因为它提供了其它插件机会过滤列表在其他情况下,别人比管理员有'edit_users'权限(因此“管理员”需要从列表中删除,否则用户可以使自己管理)。用于创建自定义角色的角色管理插件将使用该过滤器。否则,此函数本质上是get_roles() (不存在)

大概您的插件只会向具有管理员级别功能的人(例如'manage_options',基本上是可以访问所有角色的管理员)提供有问题的设置页面,因此过滤器不会影响您。

wp_dropdown_roles()提供给您角色,作为列表的<option>字段(尽管在您选择谁可以访问某些内容的许多情况下,复选框可能会更好地工作)<select>


3
注意:我将此功能创建为补丁程序的一部分,以使WP更安全,因此我偏向于它;)
jerclarke 2010年

14

尝试这个:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PS嘿,错过了解释和答复,太快了我:)



0

对于那些拥有多语言站点的人,功能

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

返回这样的本地化数组(角色名称使用斯洛伐克语):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)

0

这是在WordPress中获取所有现有用户角色以及每个角色功能的数组。如果您不想将其打印到屏幕上,请省略最后一行。第2行的$ roles变量将保存用户和功能的数组,以便您可以根据需要使用它。请参见下面的返回数组示例。

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.