在WordPress网站上获取当前可用角色的列表?
-
16-10-2019 - |
题
在编写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>';