Come ottenere l'ID utente dal suo display_name
Ho il display_name
di un utente e con questo voglio ottenere l'id
di quell'utente.
Quindi, come posso ottenere l'ID utente?

Puoi utilizzare la seguente funzione:
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;
}
Questo è lo stesso codice che utilizza get_user_by()
, ma poiché quella funzione permette solo ID
, slug
, email
o login
, dobbiamo creare una nuova funzione.

Utilizza WP_User_Query
.
$args = array(
'search' => 'Nome Visualizzato', // oppure login o nicename in questo esempio
'search_fields' => array('user_login', 'user_nicename', 'display_name')
);
$user = new WP_User_Query($args);
Ho appena risposto a una domanda molto simile: Come ottenere l'ID dell'autore dal suo Nome

il dump di $user
mostra che display_name
non è nella query sql. Usa un'altra risposta per abilitarlo http://wordpress.stackexchange.com/questions/201779/how-to-get-user-by-display-name-with-wp-user-query

Non credo che questo sia stato menzionato, probabilmente perché la ricerca include sia display_name che indirizzo email, URL, ID e username, il che è più del necessario ma ha funzionato bene per il mio caso d'uso specifico.
function get_user_id_by_search( $search_term ) {
$user = get_users(array('search' => $search_term));
if (!empty($user))
return $user[0]->ID;
}

Completamente non testato, ma non vedo nulla nel codice che possa far pensare che non funzionerebbe utilizzare get_users()
con una meta query:
$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 );

la query utente di WordPress per impostazione predefinita non consente di includere display_name nelle colonne di ricerca anche se viene aggiunto, ecco una soluzione http://manchumahara.com/2014/04/03/search-user-by-display-name-in-wordpress-sitewide/
Esempio:
$args= array(
'search' => 'Display Name', // oppure login o nicename in questo esempio
'search_fields' => array('user_login','user_nicename','display_name')
);
$user = new WP_User_Query($args);
La query sopra non troverà risultati per display_name
è necessario utilizzare questo 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;
}
