Hapus Kemampuan untuk Pengguna Lain untuk Melihat Administrator di Daftar Pengguna?

15

( Catatan Moderator: Judul asli adalah "Hapus Admin dari Menu Pengguna")

Saya telah membuat peran administrator klien yang pada dasarnya adalah Editor dengan kemampuan untuk menambah / menghapus pengguna. Artikel " Editor dapat membuat pengguna baru selain administrator " sangat bagus dalam membantu menjaga peran admin klien baru saya dari mengedit atau membuat pengguna admin Sejati.

Namun yang ideal adalah menyembunyikan administrator dari admin klien ketika mereka melihat pengguna. Saya ingin mereka "percaya" bahwa mereka adalah admin situs mereka tetapi saya tidak ingin mereka dapat melihat bahkan peran / pengguna saya - pada dasarnya menyembunyikan peran "administrator" dari mereka ketika mereka berada di "Pengguna" panel.

Carlos
sumber

Jawaban:

10

Hai @Carlos:

Coba tambahkan berikut ini ke functions.phpfile tema Anda , atau dalam .phpfile dalam plugin yang mungkin Anda tulis (yang berfungsi untuk WordPress 3.1.x):

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

Jika Anda memiliki WordPress 3.0.x coba ini sebagai gantinya (karena WordPress tidak menambahkan 'pre_user_query'kail sampai 3.1):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}
MikeSchinkel
sumber
1
Itu hanya menyembunyikan pengguna pertama yang ditambahkan (yang hampir selalu merupakan admin) ... tetapi jika administrator memiliki ID selain 1 Anda harus mengubah kueri dengan tepat. Itu juga hanya akan menyembunyikan 1 administrator, tidak semua administrator.
EAMann
Sebenarnya saya hanya bisa menjalankan ini pada versi 3.1. Kode yang sama pada versi yang lebih lama tampaknya tidak melakukan trik (bahkan 3.04).
Carlos
@ EAMann - Benar, saya merasa nyaman. Jika seseorang membutuhkan lebih banyak, saya akan memeriksanya.
MikeSchinkel
@Carlos - Apakah Anda perlu v3.0.x, atau v3.1 oke?
MikeSchinkel
@ Mike — wow, ya, jika Anda bersedia membantu saya, itu akan luar biasa. Saya telah membajak tanpa hasil. Untuk keperluan saya, Admin ID 1 berfungsi dengan baik. Saya sangat menghargai itu.
Carlos
10

Berikut adalah mod untuk jawaban MikeSchinkel yang memeriksa apakah pengguna saat ini memiliki peran administrator dan jika tidak hanya memilih pengguna yang merupakan pelanggan.

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != 'administrator' ) { 
        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}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}
patnz
sumber
1
Hanya FYI Untuk siapa pun di masa depan yang tidak terlalu mahir di SQL seperti saya, jika Anda ingin menunjukkan semua pengguna yang bukan administrator (Editor, Penulis, Pelanggan dll.) Tetapi masih menyembunyikan administrator, Anda dapat mengubah baris ini: AND {$wpdb->usermeta}.meta_value = 0dan alih-alih, buat nilai meta <10 seperti itu: AND {$wpdb->usermeta}.meta_value < 10)yang akan menampilkan semua pengguna dan menyembunyikan semua administrator dari semua pengguna, apa pun levelnya.
Howdy_McGee
2

Level Pengguna sudah tidak digunakan lagi , jadi metode ini mengecek kemampuan:

/** Hide Administrator From User List **/
function isa_pre_user_query( $user_search ) {
    if ( !current_user_can( 'administrator' ) ) { // Is Not Administrator - Remove Administrator
        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_action( 'pre_user_query', 'isa_pre_user_query' );
Howdy_McGee
sumber
1

pre_user_queryaksi dapat digunakan untuk mengubah kueri pengguna sejak WordPress 3.1.0

Virgo
sumber
1
wp_user_querytidak bekerja di 3.6.1, namun pre_user_querytidak. tidak tahu tentang
3.5.x
1
Apakah Anda yakin? Bisakah Anda mengutip sumber? Tindakan ini digunakan di trunk saat ini - lihat wp-include / user.php, baris 549 .
Johannes Pille