Modificar email de activación en WordPress y Buddypress

Hola.

En este post os voy a enseñar como modificar el email de activación de Buddypress.

Lo primero a tener en cuenta es si el WordPress que tenéis montado es Multisite o no lo es, puesto que en uno y en otro se utilizan funciones diferentes y esto te traerá de cabeza como me lo trajo a mi.

Para WordPress Multisite debeis añadir al archivo functions.php del Theme del BuddyPress:

// Por defecto quito el mensaje de activacion para luego mandar el mio propio

remove_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_notification', 1, 4 );

add_filter( 'wpmu_signup_user_notification', '__return_false', 1, 4 );

Con esto lo que vamos a hacer es que el sistema no envíe dos mensajes, uno con el mensaje original y otro con el nuestro.

Trás desabilitar el mensaje por defecto procedemos a generar el nuestro propio con el siguiente código también en el functions.php

Puntos importantes a destacar:

– Si queremos mantener el envío del mail en texto plano (Yo lo he cambiado por html) Cambiar esta línea:

// Tambien especificamos que queremos el mail en html

$message_headers = "From: \"{$from_name}\" <{$admin_email}>\n" . "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"\n";

Por:

// Cabeceras del mail especificando que va en texto plano

$message_headers = "From: \"{$from_name}\" <{$admin_email}>\n" . "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"\n";

Logicamente el mensaje de activación tambien debe ir en texto plano, por lo cual debeis cambiar los <br /> por \n y quitar cualquier etiqueta de HTML.

 

Bueno, aqui teneis la funcion encargada del cambio del email.

// Modificar el email de activacion en WordPress Multisite

add_filter( 'wpmu_signup_user_notification', 'wpmu_signup_user_notification_propia', 10, 4 );

function wpmu_signup_user_notification_propia($user, $user_email, $key, $meta = '') {

// Obtenemos el ID del blog

$blog_id = get_current_blog_id();

// Obtenemos el email del admin

$admin_email = get_option( 'admin_email' );

// Si no esta definido ponemos el por defecto

if ( $admin_email == '' )

$admin_email = 'info@' . $_SERVER['SERVER_NAME'];

// El from sera el nombre del dominio en el que estemos

$from_name = get_option( 'blogname' ) == '' ? 'WordPress' : esc_html( get_option( 'blogname' ) );

// Tambien especificamos que queremos el mail en html

$message_headers = "From: \"{$from_name}\" <{$admin_email}>\n" . "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"\n";

// Generamos el email y le pasamos la KEY que ha generado el sistema con la URL de activacion

$message = sprintf(

apply_filters( 'wpmu_signup_user_notification_email',

__( '<strong>Hola!</strong> <br /> Para activar tu cuenta debes pulsar sobre el siguiente enlace:<br /><br /><a href="%s">%s</a><br /><br />Despues de la activación recibirá *otro email* con su datos de acceso.<br /><br />' ),

$user, $user_email, $key, $meta

),

site_url( "activacion/?key=$key" ),site_url( "activacion/?key=$key" )

);

// Defino el asunto del mailmanteniendo el nombre del blog en el mismo

$subject = sprintf(

apply_filters( 'wpmu_signup_user_notification_subject',

__( '[%1$s] Activa tu cuenta. %2$s' ),

$user, $user_email, $key, $meta

),

$from_name,

$user

);

// Enviar el mail de activacion

wp_mail($user_email, $subject, $message, $message_headers);

return false;

}

Espero que os sea de utilidad, porque yo me volví loco para sacarlo al no venir documentado en ninguna parte excepto en el codigo fuente de propio Buddypress que se usan funciones diferentes en función del si el WordPress es MU o no.

Saludos!