我正在尝试获取角色列表,并通过特定功能(自定义)过滤它们。我遇到了 这个帖子, ,但是我想通过是否有能力过滤角色 edit_post.

-zack

有帮助吗?

解决方案

未经测试,但应该很容易扩展(或者您可以从中获取想法)。

function roles_have_cap( $roles = false, $cap ) {
    global $wp_roles;

    if( !isset( $wp_roles ) || !isset( $cap ) )
        return false;

    if( !$roles )
        $roles = array_keys( $wp_roles->roles );

    if( !is_array( $roles ) )
        $roles = array( $roles );

    $hascap = array();
    foreach( $roles as $role ) {
        if( !isset( $wp_roles->roles[$role]['capabilities'][$cap] ) || ( 1 != $wp_roles->roles[$role]['capabilities'][$cap] ) )
            continue;

        $hascap[] = $role;
    }

    if( empty( $hascap ) )
        return false;

    return $hascap;
}
  • 第一个参数要么具有一个单数角色名称(字符串)或要检查的角色数组具有特定的帽子。
  • 第二个参数具有单一的功能来检查(字符串)。

示例用法:

$role_can_edit_pages = roles_have_cap( 'administrator', 'edit_pages' ); 
// Result
// array( 0 => administrator )

如果函数返回false,您会知道角色没有帽子,即。

if( !$role_can_edit_pages )
// Role cannot not edit pages

否则,结果是一系列具有帽子的角色(无论您是单个角色还是多个角色)。

您可以将其修剪,如果是首选,则只有一个返回值,但是您提到想要具有帽子的角色列表,所以我自然认为一个数组是一个合乎逻辑的选择。

将阵列转换为字符串非常容易,您甚至可以使用自己的分隔器,只需致电 implode(), ,像这样...(使用前面的示例变量)..

echo implode( ' | ', $role_can_edit_pages ); // | (pipe is the example seperator here)

您也可以将爆式移动到功能中,以避免在调用该功能时必须进行内爆,并注意,爆式将在单个项目数组上正确工作到(即。

我希望这对任何案件都有帮助... :)

编辑:现在,如果第一个ARG($角色)设置为false,则功能将查看所有角色。

许可以下: CC-BY-SA归因
scroll top