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

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

评论

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

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

#1 楼

角色存储在全局变量$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'特权(因此需要从列表中删除“ admin”,否则该用户可以自己成为admin)。用于创建自定义角色的角色管理插件将使用该过滤器。否则,此函数本质上是get_roles()(不存在)。

大概您的插件将仅向具有'manage_options'之类的管理员级别功能并且基本上是可以访问所有角色的管理员的人提供有问题的设置页面,因此过滤器不会影响您。 br />
还有wp_dropdown_roles(),它使您可以充当<option>列表的<select>字段(尽管在许多情况下您选择谁可以访问某些内容时,复选框可能会更好地工作)。

评论


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

– jerclarke
2010年9月11日于20:06

#2 楼

试试这个:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}


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

#3 楼

对于具有多语言站点的用户,功能

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ľ
        )
)


#4 楼

在这里,您可以找到没有任何插件或功能的角色列表。
http://screencast.com/t/uaWsGLAR3Sh

评论


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。

–加百列
16年1月26日在21:19

#5 楼

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

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';