目的を実現したければ元となる所から順を追って調べていくのが鉄則ではないかと思います。
今回の場合、ユーザー登録のページから辿っていけばeditable_roles
というフィルターフックに辿り着けます。
これを利用して任意の権限の場合には任意の権限を選択肢より非表示にする事が可能です。
尚、current_user_can()
は使えなさそうだったのでwp_get_current_user()
を使って判定するようなコードの例です。
add_filter( 'editable_roles', function( $all_roles ) {
$user = wp_get_current_user();
// 権限Aと権限Bのユーザーからデフォルトの権限の選択肢を削除
if ( array_key_exists( $user->roles[0], array_flip( [ 'role-a', 'role-b' ] ) ) ) {
unset ( $all_roles[ 'administrator' ] ); // 選択肢から管理者を削除
unset ( $all_roles[ 'editor' ] ); // 選択肢から編集者を削除
unset ( $all_roles[ 'author' ] ); // 選択肢から投稿者を削除
unset ( $all_roles[ 'contributor' ] ); // 選択肢から寄稿者を削除
unset ( $all_roles[ 'subscriber' ] ); // 選択肢から購読者を削除
}
// 権限Aのユーザーの選択肢から権限Aを削除 (権限Aは権限Bと権限Cのユーザーしか作れない)
if ( $user->roles[0] === 'role-a' ) {
unset ( $all_roles[ 'role-a' ] );
}
// 権限Bのユーザーの選択肢から権限Aと権限Bを削除 (権限Bは権限Cのユーザーしか作れない)
if ( $user->roles[0] === 'role-b' ) {
unset ( $all_roles[ 'role-a' ] );
unset ( $all_roles[ 'role-b' ] );
}
return $all_roles;
} );
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/15 09:43