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

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

有帮助吗?

解决方案

角色存储在全局变量中 $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> a的字段 <select> 列表 (尽管复选框在许多情况下可能会选择谁可以访问某些东西).

其他提示

尝试这个:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS呵呵,错过了解释并回答,我太快了:)

这是您可以找到无需任何插件或功能的角色列表http://screencast.com/t/uawsglar3sh

对于具有多语言网站的人

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

这就是如何获得所有现有用户角色的数组,以及在WordPress中的每个角色的功能。如果您不想将其打印到屏幕上,请省略最后一行。第2行上的$角色变量将容纳一系列用户和功能,因此您可以根据需要使用它。有关返回的数组的示例,请参见下文。

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
许可以下: CC-BY-SA归因
scroll top