题
我正在尝试获取角色列表,并通过特定功能(自定义)过滤它们。我遇到了 这个帖子, ,但是我想通过是否有能力过滤角色 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,则功能将查看所有角色。