问题描述

编写 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;
}

“editable” 部分是因为它提供其他插件有机会过滤列表,以防其他管理员除了'edit_users'权限 (因此’admin’ 需要从列表中删除,否则该用户可以使自己管理) 。用于创建自定义角色的角色管理插件是使用该过滤器的角色管理插件。否则这个功能本质上是 get_roles()(不存在) 。

大概你的插件只会向具有 admin-level 功能的人 ('manage_options') 提供有问题的设置页面,并且基本上是一个可以访问所有角色的管理员,所以过滤器不应该影响你。

还有 wp_dropdown_roles(),它为<select> 列表提供了<option> 字段的作用 (尽管复选框在许多情况下可能会更好,您可以选择谁可以访问某些内容) 。

次佳解决方案

尝试这个:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。