X

Personalizar email de registro de nuevo usuario en WordPress

Cuando se registra un nuevo usuario, por defecto WordPress envía un mensaje de activación al usuario y también un correo al administrador del sitio, en este artículo aprenderás cómo modificar estos correos, cambiando el nombre del remitente, correo, asunto e incluso contenido.

 

Generalidades

Existen diferentes plugins para realizar la personalización de correos que se envían tras el registro de un usuario, sin embargo en este artículo aprenderás cómo realizarlo a través de código.

 

Personalizar Email Enviado al Usuario

Al final lo que queremos lograr es algo similar a lo que se muestra en la siguiente imagen:

 

Para esto usaremos el siguiente código:

add_filter( 'wp_new_user_notification_email', 'dcms_new_user_email', 10, 3 );

function dcms_new_user_email( $wp_new_user_email, $user, $blogname ) {
	$headers = array('From: Tu Empresa <admin@tuempresa.site>');
	$subject = sprintf( 'Te has registrado en [%s].', $blogname );

	$wp_new_user_email['headers'] = $headers;
	$wp_new_user_email['subject'] = $subject;

	return $wp_new_user_email;
}
Puedes colocar este código al final de tu archivo functions.php de tu child-theme o a través de un plugin de Snippets
Sólo hemos cambiado el nombre y correo del remitente y el asunto, pero también es posible cambiar el texto del mensaje con $wp_new_user_email[‘message’]

 
En el código anterior:

  • Utilizamos el Hook wp_new_user_notification_email que hace referencia a la función dcms_new_user_email
  • La función acepta tres parámetros, el primero de ellos es un array asociativo que contiene los datos del email a enviarse
  • Para este caso sólo cambiaremos las cabeceras y el asunto, por lo tanto definimos dos variables $headers y $subject
  • Para cambiar el nombre y correo del remitente usamos la variable $headers, la cual será posteriormente asignado al parámetro del array asociativo
  • Al final devolvemos el parámetro $wp_new_user_email modificado

 
 

Personalizar Email Enviado al Administrador

Al final lo que queremos lograr es algo similar a la siguiente imagen:

 

Para esto usaremos el siguiente código:

add_filter( 'wp_new_user_notification_email_admin', 'dcms_admin_new_user_email', 10, 3 );

function dcms_admin_new_user_email( $wp_new_user_email, $user, $blogname ) {
	$headers = array('From: Tu Empresa <admin@tuempresa.site>');
	$subject = sprintf( '[%s] Nuevo usuario registrado.', $blogname );
	$message = sprintf( "%s ( %s ) \n\r ha sido registrado en el sitio %s.",
	$user->user_login, $user->user_email, $blogname );

	$wp_new_user_email['headers'] = $headers;
	$wp_new_user_email['subject'] = $subject;
	$wp_new_user_email['message'] = $message;

	return $wp_new_user_email;
}
Puedes colocar este código al final de tu archivo functions.php de tu child-theme o a través de un plugin de Snippets
En este código hemos cambiado el nombre y correo del remitente asi como el asunto y el mensaje, todo se asigna al final a la variable $wp_new_user_email

 
En el código anterior:

  • Utilizamos el Hook wp_new_user_notification_email_admin que hace referencia a la función dcms_admin_new_user_email
  • La función acepta tres parámetros, el primero de ellos es un array asociativo que contiene los datos del email a enviarse
  • Para este caso cambiaremos: las cabeceras, el asunto y el mensaje, por lo tanto definimos tres variables $headers, $subject y $message
  • Para cambiar el nombre y correo del remitente usamos la variable $headers, la cual será posteriormente asignado al parámetro del array asociativo
  • Al final devolvemos el parámetro $wp_new_user_email modificado

 

Conclusión

Tal como has visto, a través de los Hooks y algo de código puedes hacer modificaciones al correo enviado cuando se registra un nuevo usuario en tu sitio web WordPress y de esta manera evitar el uso de un plugin adicional.

 

Categorías: Core
Etiquetas: dashboardmejoras

Ver comentarios (29)

  • Hola Jhon, que buen artículo. Me quedan par de dudas:
    1.- ¿Cómo se puede agregar también el detalle de la contraseña? De manera que el usuario tengo tanto su Username como la Contraseña que se generó al momento de dar de alta a ese usuario.

    2.- ¿Se pueden personalizar otros aspectos del mensaje? Para que por ejemplo antes de los datos de acceso haya un mensaje como: Hola (nombre del usuario) bienvenido a (web) aquí encontrarás todos los datos para acceder a tu perfil. Solo debes hacer clic en el siguiente enlace y entrar con los datos que te enviamos a continuación. Esto lo digo como ejemplo.

    De antemano muchísimas gracias por tu tiempo. Y de nuevo, muy buen artículo.

    • Hola
      1- La contraseña no se muestra, se genera un enlace para cambiar la contraseña, esto lo gestiona el propio WordPress por seguridad.
      2- Si, puedes cambiar el mensaje como lo desees, debes cambiar la variable $message

      Saludos.

  • hola jhon, siempre son bueno tus artículos. Pero esta vez no me funciono el codigo. No se que sera aun cuando lo hago con plugin tampoco funciona.

    • Hola, es muy raro, si que debería funcionar, tal vez tienes conflicto con algún otro plugin o con algún código del theme, podrías probarlo en otro sitio y verificar si te sucede lo mismo.

  • Hola, muchas gracias por la información.

    ¿Tendrás el código para modificar de la misma forma el correo que recibe el usuario al momento de cambiar su contraseña?

    Gracias.

    • Hola, de momento no, pero tomo nota para revisar y evaluar hacer un artículo sobre eso.

  • Hola Jhon;
    Te comento que gracias a tu tutorial modifique el subject y from de forma exitosa. tambien quise modificar el cuerpo del mensaje pero tengo el problema de que el enlace para restablecer contraseña no me carga correctamente.

    Este es el codigo que puse:

    add_filter( 'wp_new_user_notification_email', 'dcms_new_user_email', 10, 3 );
    
    function dcms_new_user_email( $wp_new_user_email, $user, $blogname ) {
    	$headers = array('From: Diego Perez ');
    	$subject = sprintf( 'Te has registrado en [%s].', $blogname );
    	
    	 /* translators: %s: User login. */
    	$message  = __( 'Gracias por suscribirte a Webejemplo' ) . "\r\n\r\n";
    	$message .= __( 'Aquí los detalles para tu acceso:' ) . "\r\n\r\n";
        $message .= sprintf( __( 'Email: %s' ), $user->user_email ) . "\r\n\r\n";
        $message .= __( 'Para crear tu password, visita la siguiente URL:' ) . "\r\n\r\n";
        $message .= network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . "\r\n\r\n";
    
    	$wp_new_user_email['headers'] = $headers;
    	$wp_new_user_email['subject'] = $subject;
    	$wp_new_user_email['message'] = $message;
    
    	return $wp_new_user_email;
    

    Y esta la forma en que llega el mensaje:

    Gracias por suscribirte a Webejemplo Aquí los detalles para tu acceso: Correo electrónico: diego102@gmail.com Para crear tu password, visita la siguiente URL: https://webejemplo.com/wp-login.php?action=rp&key=&login=diegoh6

    Como se ve en el enlace para crear el password no me carga el key y eso hace que el enlace sea inválido. Sabes por qué el key no carga? Y tambien mi mensaje sale junto sin espacios de lineas.

  • hola jhon me podria ayudar a mi no me funciono soy novata en esto, me urge hacer esta modificación ,lo estoy haciendo con el plugin y no me funciona .

  • hola jhon lo he intentado como tu lo dices y no pasa nada ... esta bien como lo hago

    add_filter( 'wp_new_user_notification_email', 'dcms_new_user_email', 10, 3 );

    function dcms_new_user_email( $wp_new_user_email, $user, $blogname ) {
    $headers = array('From: jessy ');
    $subject = sprintf( 'Te has registrado en [%s].', $blogname );

    $wp_new_user_email['headers'] = $headers;
    $wp_new_user_email['subject'] = $subject;

    return $wp_new_user_email;
    }

    un abrazo , agradezco tu respuesta

  • o disculpa jhon, yo lo necesito es para que especialmente el usuario recupere la contraseña, cuando llegue a su correo no salga el nombre de wordprees , la variable es la misma ? disculpa las molestias yo soy nueva en esto agradezco que me ayudaras con el codigo en caso tal que la variable no sea la misma .

  • Esta genial el Post.
    Ahora me gustaria agregar una imagen en el cuerpo del mesaje. El logotipo de mi empresa. y no consigo hacerlo.
    Siempre que intento incluir un código me lo pinta tal cual ya sea una <img src="... o un div o lo que sea...

    Muchas gracias de ante mano,
    saludos,
    Sergio

  • Hola Jhon, gracias por el artículo.
    En mi caso, el mail que se envía automáticamente contiene:
    - nombre de usuario
    - contraseña
    - url que lleva a la validación en wordpress.
    ME gustaría que:
    1) no se enviara la contraseña (me parece poco seguro), sino un enlace para introducirla por primera vez o reestablecerla.
    2) la url llevase a mi home y no a wordpress. De esta manera se da más sensación de unidad.

    ¿Alguna ayuda para poder hacerlo?
    Gracias!