Rimuovere la Possibilità per Altri Utenti di Visualizzare l'Amministratore nell'Elenco Utenti?

28 feb 2011, 20:55:27
Visualizzazioni: 16.3K
Voti: 15

(Nota del moderatore: Il titolo originale era "Rimuovi Amministratore dal menu Utenti")

Ho creato un ruolo di amministratore clienti che è essenzialmente un Editor con la possibilità di aggiungere/rimuovere utenti. L'articolo "Editor può creare qualsiasi nuovo utente tranne l'amministratore" è stato eccellente nell'aiutarmi a impedire al mio nuovo ruolo di amministratore clienti di modificare o creare un vero utente amministratore.

Tuttavia, sarebbe ideale nascondere gli amministratori agli amministratori clienti quando visualizzano gli utenti. Voglio che loro "credano" di essere gli amministratori del loro sito, ma non voglio che possano nemmeno visualizzare il mio ruolo/utente - sostanzialmente nascondendo il ruolo "amministratore" da loro quando sono nel pannello "Utenti".

0
Tutte le risposte alla domanda 4
11
11

Ciao @Carlos:

Prova ad aggiungere il seguente codice al file functions.php del tuo tema, oppure in un file .php all'interno di un plugin che potresti star scrivendo (funziona per 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) { // Non è l'amministratore, rimuovi l'amministratore
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

Se hai WordPress 3.0.x prova invece questo (dato che WordPress non ha aggiunto l'hook 'pre_user_query' fino alla versione 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) { // Non è l'amministratore, rimuovi l'amministratore
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}
28 feb 2011 21:22:22
Commenti

Questo nasconde solo il primo utente aggiunto (che è quasi sempre l'amministratore)... ma se l'amministratore ha un ID diverso da 1 dovrai modificare la query di conseguenza. Nasconderà inoltre solo 1 amministratore, non tutti gli amministratori.

EAMann EAMann
28 feb 2011 21:50:28

In realtà sono riuscito a farlo funzionare solo sulla versione 3.1. Lo stesso codice su versioni più vecchie non sembra funzionare (neanche su 3.04).

Carlos Carlos
1 mar 2011 01:22:57

@EAMann - Vero, stavo semplificando. Se qualcuno ha bisogno di più funzionalità, ci darò un'occhiata.

MikeSchinkel MikeSchinkel
1 mar 2011 05:33:02

@Carlos - Hai bisogno della versione 3.0.x, oppure va bene la 3.1?

MikeSchinkel MikeSchinkel
1 mar 2011 05:33:21

@Mike—wow, sì, se volessi aiutarmi con questo sarebbe fantastico. Ho provato a modificare il codice senza successo. Per le mie esigenze l'ID Admin 1 va benissimo. Lo apprezzo molto.

Carlos Carlos
1 mar 2011 09:20:10

@Carlos - Per chiarire, intendi che ti serve una versione 3.0.x o qualcos'altro?

MikeSchinkel MikeSchinkel
1 mar 2011 19:42:50

@Carlos - Vedi la mia risposta aggiornata.

MikeSchinkel MikeSchinkel
2 mar 2011 06:54:01

@Mike--funziona perfettamente. Grazie mille per il tuo aiuto.

Carlos Carlos
4 mar 2011 21:01:51

@Carlos - Felice di aver potuto aiutare.

MikeSchinkel MikeSchinkel
4 mar 2011 21:57:21

esiste un plugin che possa fare questo?

ReNiSh AR ReNiSh AR
4 giu 2014 18:52:46

@ReNiShAR Forse, ma conoscere quali plugin esistono non è la mia specializzazione. So invece come costruirli. :) Forse Google può aiutarti?

MikeSchinkel MikeSchinkel
7 giu 2014 06:20:50
Mostra i restanti 6 commenti
1
10

Ecco una modifica alla risposta di MikeSchinkel che verifica se l'utente corrente ha il ruolo di amministratore e, in caso contrario, seleziona solo gli utenti che sono sottoscrittori.

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

    }
}
7 feb 2012 04:12:38
Commenti

Solo per informazione, per chi in futuro non sia molto esperto di SQL come me, se vuoi mostrare tutti gli utenti che non sono amministratori (Editori, Autori, Sottoscrittori ecc.) ma comunque nascondere gli amministratori, potresti cambiare questa riga: AND {$wpdb->usermeta}.meta_value = 0 e invece impostare il meta value < 10 così: AND {$wpdb->usermeta}.meta_value < 10) che mostrerà tutti gli utenti e nasconderà tutti gli amministratori da tutti gli utenti indipendentemente dal loro livello.

Howdy_McGee Howdy_McGee
19 ago 2013 17:26:13
0

I Livelli Utente sono deprecati, quindi questo metodo verifica le capacità invece:

/** Nascondi l'Amministratore dalla Lista Utenti **/
function isa_pre_user_query( $user_search ) {
    if ( !current_user_can( 'administrator' ) ) { // Non è un Amministratore - Rimuovi Amministratore
        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' );
14 nov 2013 19:44:56
2

L'azione pre_user_query può essere utilizzata per modificare la query degli utenti a partire da WordPress 3.1.0

4 mar 2013 20:28:38
Commenti

Sei sicuro? Puoi citare una fonte? Questa azione è utilizzata nell'attuale trunk - vedi wp-includes/user.php, riga 549.

Johannes Pille Johannes Pille
27 set 2013 12:48:20

wp_user_query non funziona in 3.6.1, invece pre_user_query sì. Non so riguardo a 3.5.x

gwillie gwillie
27 set 2013 11:37:55