Establecer "Mostrar nombre públicamente como" para que sea el nombre de usuario por defecto
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?

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);

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

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

¿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é.

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

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.

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

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

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.

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

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));
}
}

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();
