私は役割のリストを取得し、特定の機能(カスタム)でそれらをフィルタリングしようとしています。私は この投稿 に出くわしました、しかし、私は彼らが能力があるかどうかによって役割をフィルターにかけたいです、例えば、edit_post
。
- ザック
テストされていませんが、簡単に拡張可能であるべきです(またはあなたがアイデアを取ることができるもの)。
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)
関数を呼び出すときに分割を行わなくても済むように関数に分割を移動することもできます。注意してください。
私はそれがとにかく役立つことを願っています... :)
編集:最初の引数($ roles)がfalseに設定されている場合、関数はすべてのロールを見るようになりました。