自分のスーパー管理者をユーザーリストから隠すにはどうすればよいですか?私のクライアントはユーザーを作成する能力である必要がありますが、私のスーパーアドミンユーザーを編集/参照することはできません。それは可能ですか?
私は以下をお勧めします。
WordPressの編集者ユーザーロールは、デフォルトではユーザーを編集できません。あなたがあなたが '編集者'として保持しているクライアントのためにその機能を追加したいかもしれません。これにより、エディターは新規ユーザーの追加(新規ユーザーの作成)、ユーザーの削除、およびユーザーの編集を行うことができます。これは 'add_cap
'で編集者ロールに機能を追加することによって行われます。
これにより、編集者はユーザーを管理できます
function wpse104808_editor_manage_users() {
if ( get_option( 'wpse104808_add_cap_editor_once' ) != 'done' ) {
// let editor manage users
$edit_editor = get_role('editor'); // Get the user role
$edit_editor->add_cap('edit_users');
$edit_editor->add_cap('list_users');
$edit_editor->add_cap('promote_users');
$edit_editor->add_cap('create_users');
$edit_editor->add_cap('add_users');
$edit_editor->add_cap('delete_users');
update_option( 'wpse104808_add_cap_editor_once', 'done' );
}
}
add_action( 'init', 'wpse104808_editor_manage_users' );
編集者が管理者ユーザーを削除できないようにする
これにより、編集者による新しい管理者の削除、編集、追加ができなくなります。
class wpse104808_user_caps {
// Add our filters
function wpse104808_user_caps(){
add_filter( 'editable_roles', array(&$this, 'editable_roles'));
add_filter( 'map_meta_cap', array(&$this, 'map_meta_cap'),10,4);
}
// Remove 'Administrator' from the list of roles if the current user is not an admin
function editable_roles( $roles ){
if( isset( $roles['administrator'] ) && !current_user_can('administrator') ){
unset( $roles['administrator']);
}
return $roles;
}
// If someone is trying to edit or delete an
// admin and that user isn't an admin, don't allow it
function map_meta_cap( $caps, $cap, $user_id, $args ){
switch( $cap ){
case 'edit_user':
case 'remove_user':
case 'promote_user':
if( isset($args[0]) && $args[0] == $user_id )
break;
elseif( !isset($args[0]) )
$caps[] = 'do_not_allow';
$other = new WP_User( absint($args[0]) );
if( $other->has_cap( 'administrator' ) ){
if(!current_user_can('administrator')){
$caps[] = 'do_not_allow';
}
}
break;
case 'delete_user':
case 'delete_users':
if( !isset($args[0]) )
break;
$other = new WP_User( absint($args[0]) );
if( $other->has_cap( 'administrator' ) ){
if(!current_user_can('administrator')){
$caps[] = 'do_not_allow';
}
}
break;
default:
break;
}
return $caps;
}
}
$wpse104808_custom_role = new wpse104808_user_caps();
ユーザーリストから管理者を隠す
ユーザーリストからユーザーを隠す3つのバリエーションがあります。以下の1つを選択してください
ユーザーリストから隠すために個々のIDを選択したい場合は、これを使用してください( '2,5,7,9
'を隠したいユーザーIDに置き換えてください)
add_action('pre_user_query','wpse104808_pre_user_query');
function wpse104808_pre_user_query($user_search) {
$admin_ids = '2,5,7,9'; // REPLACE THESE NUMBERS WITH IDs TO HIDE.
$user = wp_get_current_user();
$admin_array = explode($admin_ids, ',');
if ( ! in_array( $user->ID, $admin_array ) ) {
global $wpdb;
$user_search->query_where = str_replace('WHERE 1=1', "WHERE 1=1 AND {$wpdb->users}.ID NOT IN($admin_ids)",$user_search->query_where);
}
}
// Hide all administrators from user list.
add_action('pre_user_query','wpse104808_pre_user_query');
function wpse104808_pre_user_query($user_search) {
$user = wp_get_current_user();
if ( ! current_user_can( 'manage_options' ) ) {
global $wpdb;
$user_search->query_where =
str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.ID IN (
SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta
WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')",
$user_search->query_where
);
}
}
関連リンク:
- 役割と機能
- add cap
- WP_Role::add_cap
- WP_User::add_cap