Cómo obtener el ID de usuario mediante su display_name

12 mar 2013, 14:45:03
Vistas: 20.3K
Votos: 4

Tengo el display_name de un usuario y con esto quiero obtener el id de ese usuario.

Entonces, ¿cómo puedo obtener el ID del usuario?

0
Todas las respuestas a la pregunta 5
0

Puedes utilizar la siguiente función:

function get_user_id_by_display_name( $display_name ) {
    global $wpdb;

    if ( ! $user = $wpdb->get_row( $wpdb->prepare(
        "SELECT `ID` FROM $wpdb->users WHERE `display_name` = %s", $display_name
    ) ) )
        return false;

    return $user->ID;
}

Este es el mismo código que utiliza get_user_by(), pero como esa función solo permite ID, slug, email o login, tenemos que crear una nueva función.

12 mar 2013 15:21:51
3

Utiliza WP_User_Query.

$args= array(
  'search' => 'Nombre para mostrar', // o login o nicename en este ejemplo
  'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);

Acabo de responder una pregunta muy similar a esta: Cómo podemos obtener el ID del autor por su Nombre

12 mar 2013 16:22:44
Comentarios

Esto no parece estar funcionando para mí

EHerman EHerman
8 abr 2014 17:49:04

@EHerman: sin más información no podría decirte por qué.

s_ha_dum s_ha_dum
8 abr 2014 17:58:44

el dump de $user muestra que display_name no está en la consulta SQL. Usa otra respuesta para habilitarlo http://wordpress.stackexchange.com/questions/201779/how-to-get-user-by-display-name-with-wp-user-query

shukshin.ivan shukshin.ivan
28 sept 2015 17:07:18
0

No creo que esto se haya mencionado, probablemente porque busca tanto display_name como dirección de correo electrónico, URL, ID y nombre de usuario, esto es más de lo requerido pero funcionó bien para mi caso de uso particular.

function get_user_id_by_search( $search_term ) {
    $user = get_users(array('search' =>  $search_term));

    if (!empty($user))
        return $user[0]->ID;
}
10 ene 2017 16:34:12
1

Completamente no probado, pero no veo nada en el código por lo que no funcionaría usar get_users() con una consulta de metadatos:

$users = get_users( array(
    'meta_key' => 'display_name',
    'meta_value' => 'John Doe'
) );

$user = ( ( isset( $users[0] ) ? $users[0] : false );

$user_id = ( $user ? $user->ID : false );
12 mar 2013 16:34:29
Comentarios

display_name no está en la tabla usermeta sino que es una columna dedicada en la tabla users.

Peter Bushnell Peter Bushnell
10 ene 2017 16:37:19
0

La consulta de usuarios de WordPress por defecto no permite usar display_name en la columna de búsqueda aunque se agregue, aquí hay una solución http://manchumahara.com/2014/04/03/search-user-by-display-name-in-wordpress-sitewide/

Ejemplo:

$args= array(
  'search' => 'Nombre para mostrar', // o login o nicename en este ejemplo
  'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);

La consulta anterior no buscará por display_name

Necesitas usar este filtro

add_filter('user_search_columns', 'user_search_columns_bd' , 10, 3);

function user_search_columns_bd($search_columns, $search, $this){
    if(!in_array('display_name', $search_columns)){
        $search_columns[] = 'display_name';
    }
    return $search_columns;
}
4 abr 2014 10:36:23