Diğer Kullanıcıların Kullanıcı Listesinde Yönetici Görme Özelliği Kaldırılsın mı?


15

( Moderatör notu: Orijinal başlık "Yönetici Kullanıcı Menüsünden Kaldır")

Kullanıcı ekleme / kaldırma yeteneğine sahip bir Editör olan bir istemci yöneticisi rolü oluşturdum. Makale " Editör yönetici dışında herhangi yeni bir kullanıcı oluşturabilir " düzenlerken veya gerçek bir yönetici kullanıcı oluşturmasını benim yeni müşteri yönetici rolüne tutmak yardımcı mükemmeldi.

Bununla birlikte, ideal olan, yöneticileri kullanıcıları görüntülerken istemci yöneticilerinden gizlemektir. Sitelerinin yöneticisi olduklarına "inanmalarını" istiyorum , ancak rolümü / kullanıcımı bile görüntüleyebilmelerini istemiyorum - temelde "Kullanıcılar" olduklarında "yönetici" rolünü gizleme panel.

Yanıtlar:


10

Merhaba @Carlos:

Temanızın functions.phpdosyasına veya .phpyazdığınız bir eklenti içindeki bir dosyaya (WordPress 3.1.x için çalışır) aşağıdakileri eklemeyi deneyin :

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);
  }
}

WordPress 3.0.x'iniz varsa bunu deneyin (WordPress, 'pre_user_query'3.1'e kadar kancayı eklemediğinden ):

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);
  }
}

1
Bu yalnızca eklenen ilk kullanıcıyı gizler (neredeyse her zaman yönetici) ... ancak yöneticinin 1 dışında bir kimliği varsa, sorguyu uygun şekilde değiştirmeniz gerekir. Ayrıca tüm yöneticileri değil, yalnızca 1 yöneticiyi gizler.
EAMann

Aslında bu sadece sürüm 3.1 üzerinde çalışmak için alabilir. Daha eski sürümlerde aynı kod hile gibi görünmüyor (hatta 3.04).
Carlos

@EAMann - Doğru, uygun oluyordum. Eğer birisi daha fazlasına ihtiyaç duyarsa ben de ona bakarım
MikeSchinkel

@Carlos - v3.0.x'e ihtiyacınız var mı, yoksa v3.1 iyi mi?
MikeSchinkel

@ Mike — vay, evet bu konuda bana yardım etmeye istekli olsaydın harika olurdu. Ben boşuna kesmek için uzak olmuştur. Benim için Yönetici Kimliği 1 gayet iyi çalışıyor. Gerçekten onu takdir ederim.
Carlos

10

MikeSchinkel'in cevabında, mevcut kullanıcının yönetici rolü olup olmadığını ve yalnızca abone olan kullanıcıları seçip seçmediğini kontrol eden bir mod var.

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
        );

    }
}

1
Sadece FYI Gelecekte SQL'de kendim gibi çok yetenekli olmayan herkes için, yönetici olmayan (Editörler, Yazarlar, Aboneler vb.) Ancak yine de yöneticileri gizleyen tüm kullanıcılara göstermek istiyorsanız, bu satırı değiştirebilirsiniz: AND {$wpdb->usermeta}.meta_value = 0ve bunun yerine <10 meta değerini şu şekilde yapın: AND {$wpdb->usermeta}.meta_value < 10)bu, tüm kullanıcıları gösterecek ve düzeyleri ne olursa olsun tüm yöneticileri tüm kullanıcılardan gizleyecektir.
Howdy_McGee

2

Kullanıcı Seviyeleri kullanımdan kaldırıldı , bu nedenle bu yöntem bunun yerine yetenekleri kontrol eder:

/** 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' );

1

pre_user_queryeylemi, WordPress 3.1.0'dan beri kullanıcı sorgusunu değiştirmek için kullanılabilir


1
wp_user_query3.6.1 'de pre_user_queryçalışmaz , ancak çalışır . 3.5.x hakkında bilmiyorum
gwillie

1
Emin misin? Bir kaynak gösterebilir misiniz? Bu eylem kullanıldığı akım bagajına - bkz wp-includes / User.php, çizgi 549 .
Johannes Pille
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.