Establecer "Mostrar nombre públicamente como" para que sea el nombre de usuario por defecto

10 ene 2016, 22:05:02
Vistas: 15.7K
Votos: 3

Actualmente, mi sitio de WordPress muestra la información identificativa de los usuarios por su NOMBRE + APELLIDO.

La gran mayoría prefiere ser conocidos por sus nombres de usuario. He indicado cómo cambiar manualmente su "Mostrar nombre públicamente como" (a través de sus ajustes de usuario), pero esto no es lo ideal.

Me gustaría que los nuevos usuarios se muestren con sus nombres de usuario como valor por defecto. Nota: quiero que esto se refleje en varios plugins que hacen referencia a la propiedad "Mostrar nombre públicamente como".

¿Cómo puedo hacer esto?

4
Comentarios

Podrías modificar tu tema para que siempre muestre el nombre de usuario en lugar de cualquier otra cosa.

flomei flomei
10 ene 2016 23:13:05

En este caso no se trata solo del tema, sino también de algunos plugins que estoy usando

CodyBugstein CodyBugstein
10 ene 2016 23:13:50

Esa sería una información útil para tu primer post, por favor agrega esa información.

flomei flomei
10 ene 2016 23:15:51

@flomei ok, lo he añadido

CodyBugstein CodyBugstein
10 ene 2016 23:16:49
Todas las respuestas a la pregunta 3
12

Si deseas que esto aplique para todos los usuarios futuros, entonces engancha el evento user_register y actualízalo allí.

Obtén el WP_User usando get_userdata y actualiza la información con wp_update_user con el nuevo nombre para mostrar.

add_action( 'user_register', 'wpse_20160110_user_register', 10, 1 );

function wpse_20160110_user_register ( $user_id ) {

    // obtener los datos del usuario

    $user_info = get_userdata( $user_id );

    // elegir nuestro nombre para mostrar por defecto

    $display_publicly_as = $user_info->user_login;

    // actualizar el nombre para mostrar

    wp_update_user( array ('ID' => $user_id, 'display_name' =>  $display_publicly_as));
}

Si deseas configurar esto en cada inicio de sesión, entonces engancha wp_login usando 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);
10 ene 2016 23:22:30
Comentarios

¡Gracias! ¿Dónde debería ir este código?

CodyBugstein CodyBugstein
11 ene 2016 21:49:26

Puedes colocarlo en un plugin o en functions.php, pero si lo pones en tu tema existe la posibilidad de que se sobrescriba.

jgraup jgraup
11 ene 2016 22:28:51

Probé la parte del inicio de sesión y no funciona para cambiar el nombre mostrado

CodyBugstein CodyBugstein
17 ene 2016 08:18:12

¡Probé la acción de registro y funciona!

CodyBugstein CodyBugstein
17 ene 2016 08:23:26

¿Puedes verificar primero si el hook está funcionando? Luego asegúrate de que los datos lleguen correctamente. Y finalmente que la prioridad sea lo suficientemente tardía? Recuerdo que esto funcionó para mí cuando lo probé.

jgraup jgraup
17 ene 2016 16:12:15

¿Cómo puedo comprobar si la prioridad es lo suficientemente tardía? (disculpa, soy nuevo en WordPress)

CodyBugstein CodyBugstein
17 ene 2016 23:55:40

0/1 es temprano. 10 es el valor por defecto. 99 es tarde, significa que se ejecuta después de la mayoría de hooks. Usarías 99 si otro hook establece esa información y quieres asegurarte de ser el último en establecer los metadatos. Pero de nuevo, verifica que se esté llamando, comprueba que los datos se estén estableciendo antes de preocuparte por la prioridad.

jgraup jgraup
18 ene 2016 03:11:31

Genial, pero ¿cómo me aseguro de ser el último? No puedo revisar manualmente cientos de archivos

CodyBugstein CodyBugstein
19 ene 2016 16:27:03

https://wordpress.org/plugins/query-monitor/ te mostrará los hooks y su prioridad.

jgraup jgraup
19 ene 2016 17:02:47

Acabo de probar esto nuevamente. Actualicé el ejemplo para usar PHP_INT_MAX que debería ser el último momento posible para usar el hook. Si eso no funciona, hay algo más que está pasando.

jgraup jgraup
19 ene 2016 17:26:07

Puedes adjuntarlo en el hook 'profile_update', así se ejecutará en cada actualización de usuarios.

Marco Marsala Marco Marsala
26 ene 2018 09:33:46

@MarcoMarsala Intenté engancharlo en 'profile_update' y obtuve un bucle infinito. =.= Supongo que es porque esta función también actualiza el perfil.

Betty Betty
3 mar 2019 16:28:36
Mostrar los 7 comentarios restantes
0

Para establecer programáticamente el nombre para mostrar tanto en el registro como en la actualización del perfil, evitando el bucle infinito que experimentó Betty, debes verificar si el nombre para mostrar ya está configurado según lo necesario.

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));
    }
}
28 may 2019 14:22:31
0

Para actualizar durante el registro y en la actualización del perfil:

function set_display_name_to_first_last_name( $user_id ) {
    $user_info = get_userdata( $user_id );

    // Construir el nombre completo usando el nombre y apellido.
    $full_name = trim( $user_info->first_name . ' ' . $user_info->last_name );

    // Si el nombre completo construido no está vacío y es diferente al nombre mostrado actual, actualizarlo.
    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' );

Para actualizar usuarios existentes (ejecutar una sola vez):

function update_existing_users_display_names() {
    // Obtener todos los usuarios
    $users = get_users();

    foreach ( $users as $user ) {
        // Construir el nombre completo usando el nombre y apellido.
        $full_name = trim( $user->first_name . ' ' . $user->last_name );

        // Si el nombre completo construido no está vacío y es diferente al nombre mostrado actual, actualizarlo.
        if ( ! empty( $full_name ) && $full_name !== $user->display_name ) {
            wp_update_user( array( 'ID' => $user->ID, 'display_name' => $full_name ) );
        }
    }
}

// Llamar a la función para realizar la actualización.
update_existing_users_display_names();
16 oct 2023 00:40:43