¿Desea eliminar la capacidad de otros usuarios para ver al administrador en la lista de usuarios?

12

( Nota del moderador: El título original era "Eliminar administrador del menú de usuario")

He creado una función de administrador de cliente que es esencialmente un Editor con capacidad para agregar / eliminar usuarios. El artículo " Editor puede crear cualquier nuevo usuario, excepto el administrador " fue excelente para ayudar a evitar que mi nuevo rol de administrador de cliente edite o cree un usuario de administrador verdadero.

Sin embargo, lo que sería ideal es ocultar a los administradores de los administradores de clientes cuando están viendo usuarios. Quiero que "crean" que ellos son los administradores de su sitio, pero no quiero que puedan ver mi rol / usuario, esencialmente ocultando el "administrador" rol de ellos cuando están en el panel "Usuarios" .

    
pregunta Carlos 28.02.2011 - 19:55

4 respuestas

10

Hola @Carlos:

Intente agregar lo siguiente al archivo functions.php de su tema, o en un archivo .php dentro de un complemento que podría estar escribiendo (que funciona para 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);
  }
}

Si tiene WordPress 3.0.x, intente esto en su lugar (ya que WordPress no agregó el gancho 'pre_user_query' hasta 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);
  }
}
    
respondido por el MikeSchinkel 28.02.2011 - 20:22
9

Aquí hay un mod para la respuesta de MikeSchinkel que verifica si el usuario actual tiene un rol de administrador y, si no, solo selecciona usuarios que están suscritos.

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

    }
}
    
respondido por el patnz 07.02.2012 - 03:12
2

Los niveles de usuario están en desuso , por lo que este método se compara con las capacidades:

/** 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' );
    
respondido por el Howdy_McGee 14.11.2013 - 18:44
1
La acción

pre_user_query puede usarse para alterar la consulta del usuario desde WordPress 3.1.0

    
respondido por el Virgo 04.03.2013 - 19:28

Lea otras preguntas en las etiquetas