Imposta "Mostra nome pubblicamente come" per usare gli username di default
Il mio sito WordPress attualmente mostra le informazioni identificative degli utenti come NOME + COGNOME.
La maggior parte preferisce essere riconosciuta tramite i propri username. Ho spiegato come cambiare manualmente l'opzione "Mostra nome pubblicamente come" (tramite le impostazioni utente), ma non è la soluzione ideale.
Vorrei che i nuovi utenti vengano visualizzati con il loro username come impostazione predefinita. Nota che voglio che questo cambiamento si rifletta anche nei plugin che fanno riferimento alla proprietà "Mostra nome pubblicamente come".
Come posso fare?

Se desideri che questo avvenga per tutti gli utenti futuri, agganciati all'evento user_register
e aggiornalo lì.
Recupera l'WP_User
utilizzando get_userdata
e wp_update_user
con il nuovo nome visualizzato.
add_action( 'user_register', 'wpse_20160110_user_register', 10, 1 );
function wpse_20160110_user_register ( $user_id ) {
// ottieni i dati dell'utente
$user_info = get_userdata( $user_id );
// scegli il nostro nome visualizzato predefinito
$display_publicly_as = $user_info->user_login;
// aggiorna il nome visualizzato
wp_update_user( array ('ID' => $user_id, 'display_name' => $display_publicly_as));
}
Se vuoi impostare questo ad ogni accesso, agganciati a wp_login
utilizzando PHP_INT_MAX
.
function wpse_20160110_wp_login ( $user_login, $user ) {
wp_update_user(array('ID' => $user->ID, 'display_name' => $user_login));
}
add_action('wp_login', 'wpse_20160110_wp_login', PHP_INT_MAX, 2);

Sia in un plugin che in functions.php, ma se lo inserisci nel tuo tema c'è la possibilità che venga sovrascritto.

Ho provato la parte di login ma non funziona per cambiare il nome visualizzato

Puoi prima verificare se l'hook funziona? Poi assicurati che i dati arrivino correttamente. E infine che la priorità sia sufficientemente tarda? Ricordo che quando l'ho testato funzionava per me.

Come posso verificare se la priorità è sufficientemente tarda? (scusami, sono nuovo a WordPress)

0/1 è presto. 10 è il valore predefinito. 99 è tardi, significa che viene eseguito dopo la maggior parte degli hook. Useresti 99 se un altro hook imposta quell'informazione e vuoi assicurarti di essere l'ultimo a impostare i metadati. Ma ancora una volta, verifica che venga chiamato, controlla che i dati vengano impostati prima di preoccuparti della priorità.

Interessante, ma come faccio a essere sicuro di essere l'ultimo? Non posso controllare manualmente centinaia di file

https://wordpress.org/plugins/query-monitor/ ti mostrerà gli hook e la priorità.

Ho testato di nuovo questa cosa. Ho aggiornato l'esempio per usare PHP_INT_MAX che dovrebbe essere l'ultimo momento possibile per usare l'hook. Se non funziona c'è qualcos'altro che non va.

Puoi collegarlo all'hook 'profile_update', così verrà eseguito ad ogni aggiornamento degli utenti.

Per impostare programmaticamente il nome visualizzato sia durante la registrazione che durante l'aggiornamento del profilo, evitando il loop infinito che Betty ha sperimentato, è necessario verificare se il nome visualizzato è già impostato come desiderato.
add_action( 'user_register', 'set_login_as_displayname' );
add_action( 'profile_update', 'set_login_as_displayname' );
function set_login_as_displayname( $user_id )
{
$data = get_userdata( $user_id );
if ($data->user_login != $data->display_name) {
wp_update_user( array ('ID' => $user_id, 'display_name' => $data->user_login));
}
}

Per aggiornare durante la registrazione e l'aggiornamento del profilo:
function set_display_name_to_first_last_name( $user_id ) {
$user_info = get_userdata( $user_id );
// Costruisce il nome completo utilizzando nome e cognome.
$full_name = trim( $user_info->first_name . ' ' . $user_info->last_name );
// Se il nome completo non è vuoto ed è diverso dal display name corrente, lo aggiorna.
if ( ! empty( $full_name ) && $full_name !== $user_info->display_name ) {
wp_update_user( array( 'ID' => $user_id, 'display_name' => $full_name ) );
}
}
add_action( 'user_register', 'set_display_name_to_first_last_name' );
add_action( 'profile_update', 'set_display_name_to_first_last_name' );
Per aggiornare gli utenti esistenti (eseguire una sola volta):
function update_existing_users_display_names() {
// Recupera tutti gli utenti
$users = get_users();
foreach ( $users as $user ) {
// Costruisce il nome completo utilizzando nome e cognome.
$full_name = trim( $user->first_name . ' ' . $user->last_name );
// Se il nome completo non è vuoto ed è diverso dal display name corrente, lo aggiorna.
if ( ! empty( $full_name ) && $full_name !== $user->display_name ) {
wp_update_user( array( 'ID' => $user->ID, 'display_name' => $full_name ) );
}
}
}
// Chiama la funzione per eseguire l'aggiornamento.
update_existing_users_display_names();
