¿Cómo cambiar el correo electrónico predeterminado de registro? (con o sin plugin)
Después del registro de un nuevo usuario, WordPress envía un correo electrónico con el usuario/contraseña y un enlace a la página de inicio de sesión.
¿Existe alguna manera de cambiar esta plantilla de correo electrónico predeterminada? También me gustaría cambiar el asunto y el remitente.
Edición: Para aquellos interesados, aquí hay una solución mediante plugin.
El correo electrónico para nuevos usuarios se envía utilizando la función wp_new_user_notification()
. Esta función es "pluggable", lo que significa que puedes sobrescribirla:
// Redefinir la función de notificación de usuario
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
$user = new WP_User($user_id);
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
$message = sprintf(__('Nuevo registro de usuario en tu blog %s:'), get_option('blogname')) . "\r\n\r\n";
$message .= sprintf(__('Usuario: %s'), $user_login) . "\r\n\r\n";
$message .= sprintf(__('Correo electrónico: %s'), $user_email) . "\r\n";
@wp_mail(get_option('admin_email'), sprintf(__('[%s] Nuevo Registro de Usuario'), get_option('blogname')), $message);
if ( empty($plaintext_pass) )
return;
$message = __('Hola,') . "\r\n\r\n";
$message .= sprintf(__("¡Bienvenido a %s! Aquí está cómo ingresar:"), get_option('blogname')) . "\r\n\r\n";
$message .= wp_login_url() . "\r\n";
$message .= sprintf(__('Usuario: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Contraseña: %s'), $plaintext_pass) . "\r\n\r\n";
$message .= sprintf(__('Si tienes algún problema, por favor contáctame a %s.'), get_option('admin_email')) . "\r\n\r\n";
$message .= __('¡Adiós!');
wp_mail($user_email, sprintf(__('[%s] Tu usuario y contraseña'), get_option('blogname')), $message);
}
}
Nota: Sobrescribir funciones "pluggable" no se puede hacer en el archivo functions.php del tema. El archivo pluggable de WP ya está cargado en ese punto, por lo que la función ya estaría definida por WP (es decir, la predeterminada). Tu versión personalizada debe cargarse antes de que esto suceda, lo que significa que debes cargarla en un archivo de plugin personalizado.

@Bainternet No puedo hacer que esto funcione, he añadido esto a mi archivo de funciones, pero el correo estándar sigue enviándose. Estoy en multisitio, pero eso no debería importar, ¿verdad?

OK ahora lo tengo, parece que solo funciona como un plugin separado, no cuando lo añades a tu archivo functions.php
. Ahora funciona perfectamente, ¡gracias nuevamente por ese buen fragmento de código!

¿Funciona también para multisitio? Puedo ver que multisitio tiene un montón de funciones dentro de ms-functions.php para enviar correos de notificación.

Esta respuesta tiene varios años. La respuesta aceptada no funciona para mí. (Agregarlo a functions.php no hace ninguna diferencia en los correos electrónicos enviados cuando un nuevo usuario se registra). ¿Debería publicar una nueva pregunta?

Al final encontré un código que funcionó para mí en este tutorial: http://www.webtipblog.com/change-wordpress-user-registration-welcome-email/

Para abordar los comentarios sobre que no funciona en functions.php, eso se debe a que no puedes cargar una versión personalizada de una función pluggable tan tarde. No tiene nada que ver con que la respuesta sea antigua. Debes definir tu función personalizada antes de que se cargue la versión de WP. Cuando se carga en functions.php, la versión predeterminada del plugin ya está definida. Tienes que cargarlo como un plugin (no hay diferencia entre la respuesta dada y el enlace que publicó Kit, excepto por el paso adicional de cargarlo como plugin).

Para usuarios de 2018 en adelante:
Desde WordPress 4.9.0 hay nuevos filtros que puedes usar para esto (ya no necesitas un plugin):
- wp_new_user_notification_email - personaliza el correo enviado al Usuario
- wp_new_user_notification_email_admin - personaliza el correo enviado al Administrador
Ejemplo de uso para el correo enviado al Administrador (puedes pegar esto en el archivo functions.php de tu tema):
add_filter( 'wp_new_user_notification_email_admin', 'custom_wp_new_user_notification_email', 10, 3 );
function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
$wp_new_user_notification_email['subject'] = sprintf( '[%s] Nuevo usuario %s registrado.', $blogname, $user->user_login );
$wp_new_user_notification_email['message'] = sprintf( "%s ( %s ) se ha registrado en tu blog %s.", $user->user_login, $user->user_email, $blogname );
return $wp_new_user_notification_email;
}

Alternativamente, se podrían usar los filtros wp_new_user_notification_email
y wp_new_user_notification_email_admin
. Los interesados pueden consultar la documentación completa y código fuente para wp_new_user_notification()
.

Gracias Pete, parece que eso se introdujo en la versión 4.9.0 y parece una mejor solución.

Hola. Yo también estoy usando el plugin WP Approve User.
Actualmente envía el correo estándar cuando se registran. No debería hacerlo. Debería decir que la cuenta necesita ser aprobada primero.
We Approve User tiene opción para configurar el texto cuando la cuenta ha sido aprobada y eso funciona bien. Es el paso previo antes de la aprobación.
¿Debo usar estos nuevos filtros que mencionaste?

Solo un punto de aclaración basado en la adición de filtros hooks a la función wp_new_user_notification()
. Esta respuesta hace referencia específicamente a la sobreescritura de wp_new_user_notification()
como una función pluggable. Sin embargo, esto no aplica al uso de los filtros wp_new_user_notification_email
y wp_new_user_notification_email_admin
. Esos pueden usarse en tu archivo functions.php (o un plugin específico del sitio).
