Remover a capacidade de outros usuários para ver o administrador na lista de usuários?

12

( Nota do moderador: O título original era "Remover administrador do menu do usuário")

Eu criei uma função de administrador de cliente que é essencialmente um editor com capacidade de adicionar / remover usuários. O artigo " Editor pode criar qualquer novo usuário, exceto administrador " foi excelente para ajudar a impedir que minha nova função de administrador de clientes editasse ou criasse um usuário administrador True.

No entanto, o ideal seria ocultar os administradores dos administradores de clientes quando eles estiverem visualizando usuários. Eu quero que eles "acreditem" que eles são os administradores de seu site, mas eu não quero que eles consigam ver meu papel / usuário - essencialmente escondendo o "administrador" papel deles quando estão no painel "Usuários" .

    
por Carlos 28.02.2011 / 19:55

4 respostas

10

Oi @Carlos:

Tente adicionar o seguinte ao arquivo functions.php do seu tema ou em um arquivo .php em um plug-in que você possa estar escrevendo (que funciona para o 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);
  }
}

Se você tem o WordPress 3.0.x, tente isso (já que o WordPress não adicionou o 'pre_user_query' hook até o 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);
  }
}
    
por MikeSchinkel 28.02.2011 / 20:22
9

Aqui está um mod para a resposta de MikeSchinkel que verifica se o usuário atual tem uma função de administrador e, se não, apenas seleciona usuários que são assinantes.

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

    }
}
    
por patnz 07.02.2012 / 03:12
2

Os níveis de usuário são preteridos , portanto, esse método verifica os recursos:

/** 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' );
    
por Howdy_McGee 14.11.2013 / 18:44
1

pre_user_query action pode ser usada para alterar a consulta do usuário desde o WordPress 3.1.0

    
por Virgo 04.03.2013 / 19:28