Setează "Afișează numele public ca" să fie numele de utilizator implicit
Site-ul meu WordPress afișează în prezent informațiile de identificare ale utilizatorilor după PRENUME + NUME.
Majoritatea preferă să fie cunoscuți prin numele lor de utilizator. Le-am explicat cum să schimbe manual setarea "Afișează numele public ca" (prin setările de utilizator), dar acest lucru nu este ideal.
Doresc ca noii utilizatori să fie afișați implicit după numele de utilizator. Este important să se reflecte și în plugin-urile care folosesc proprietatea "Afișează numele public ca".
Cum pot realiza acest lucru?

Dacă dorești să aplici această setare pentru toți utilizatorii viitori, atașează-te la evenimentul user_register
și actualizează-l acolo.
Obține obiectul WP_User
folosind get_userdata
și actualizează informațiile utilizatorului cu wp_update_user
, setând noul nume afișat.
add_action( 'user_register', 'wpse_20160110_user_register', 10, 1 );
function wpse_20160110_user_register ( $user_id ) {
// obține datele utilizatorului
$user_info = get_userdata( $user_id );
// alegem numele afișat implicit
$display_publicly_as = $user_info->user_login;
// actualizează numele afișat
wp_update_user( array ('ID' => $user_id, 'display_name' => $display_publicly_as));
}
Dacă dorești să setezi această valoare la fiecare autentificare, atașează-te la wp_login
folosind 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);

Fie într-un plugin, fie în functions.php, dar dacă îl pui în tema ta, există posibilitatea să fie suprascris.

Am încercat partea de login și nu funcționează pentru a schimba numele afișat

Poți verifica mai întâi dacă hook-ul funcționează? Apoi asigură-te că datele vin corect. Și în final că prioritatea este suficient de târzie? Îmi amintesc că a funcționat pentru mine când l-am testat.

Cum pot verifica dacă prioritatea este suficient de târzie? (scuze, sunt nou în WordPress)

0/1 este devreme. 10 este implicit. 99 este târziu, ceea ce înseamnă că rulează după majoritatea hook-urilor. Ai folosi 99 dacă un alt hook setează acea informație și vrei să te asiguri că ești ultimul care setează metadatele. Dar din nou, verifică dacă este apelat, verifică dacă datele sunt setate înainte să te îngrijoreze prioritatea.

Interesant, dar cum mă asigur că sunt ultimul? Nu pot să verific manual sute de fișiere

https://wordpress.org/plugins/query-monitor/ vă va arăta hook-urile și prioritatea.

Tocmai am testat din nou acest lucru. Am actualizat exemplul pentru a folosi PHP_INT_MAX, care ar trebui să fie ultima posibilă dată pentru utilizarea acestui hook. Dacă nu funcționează, înseamnă că există altceva în joc.

Poți să-l atașezi la hook-ul 'profile_update', astfel încât să fie executat la fiecare actualizare a utilizatorilor.

Pentru a seta programatic numele afișat atât la înregistrare cât și la actualizarea profilului, evitând bucla infinită întâlnită de Betty, trebuie să verifici dacă numele afișat este deja setat așa cum este necesar.
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));
}
}

Pentru a actualiza la înregistrare și la actualizarea profilului:
function set_display_name_to_first_last_name( $user_id ) {
$user_info = get_userdata( $user_id );
// Construiește numele complet folosind prenumele și numele.
$full_name = trim( $user_info->first_name . ' ' . $user_info->last_name );
// Dacă numele complet construit nu este gol și este diferit de numele afișat curent, actualizează-l.
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' );
Pentru a actualiza utilizatorii existenți (rulează o singură dată):
function update_existing_users_display_names() {
// Obține toți utilizatorii
$users = get_users();
foreach ( $users as $user ) {
// Construiește numele complet folosind prenumele și numele.
$full_name = trim( $user->first_name . ' ' . $user->last_name );
// Dacă numele complet construit nu este gol și este diferit de numele afișat curent, actualizează-l.
if ( ! empty( $full_name ) && $full_name !== $user->display_name ) {
wp_update_user( array( 'ID' => $user->ID, 'display_name' => $full_name ) );
}
}
}
// Apelează funcția pentru a efectua actualizarea.
update_existing_users_display_names();
