¿Hay alguna manera de enviar correos electrónicos con formato HTML con la función wp_mail de Wordpress?


41

¿Hay un action_hook o algo similar que pueda ayudarme a lograr esto?

Intenté agregar marcado en una variable de cadena PHP y simplemente envié un correo electrónico con la función wp_mail de esta manera:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

¿Pero apareció como texto sin formato?

¿Algunas ideas?

Respuestas:


58

desde la página del códice wp_mail :

El tipo de contenido predeterminado es 'text / plain' que no permite el uso de HTML. Sin embargo, puede establecer el tipo de contenido del correo electrónico utilizando el filtro 'wp_mail_content_type'.

// In theme's functions.php or plug-in code:

function wpse27856_set_content_type(){
    return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

1
Hmm suena útil. Solo una pregunta, ¿alguna razón en particular por la que nombró su función wpse27856_set_content_type?
— racl101

14
No, es solo un nombre único basado en la identificación de esta pregunta en particular. wpse = wp stachexchange, 27856 es el id de esta pregunta en la URL. Solo hago eso para evitar posibles colisiones si las personas copian / pegan código de aquí.
— Milo

2
También puede incluir el tipo de contenido en sus encabezados de correo electrónico. Mira cómo lo hace el complemento Notifly.
— Otto

oh si, ja ja. Qué n00b soy. Supongo que es la identificación de esta publicación.
— racl101

1
Esto romperá su correo electrónico de restablecimiento de contraseña, porque el enlace de restablecimiento está envuelto en <>.
— Simon Josef Kok

92

Como alternativa, puede especificar el encabezado HTTP Content-Type en el parámetro $ headers:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
Esto funciona mejor ya que add_filter a veces se muestra como archivo adjunto. ¡Gracias por compartir!
— deepakssn

10

No olvide eliminar el filtro de tipo de contenido después de usar la función wp_mail. Después de la respuesta aceptada, debe hacer esto después de ejecutar wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Consulte este ticket aquí: restablezca el tipo de contenido para evitar conflictos: http://core.trac.wordpress.org/ticket/23578


77
Esto debería ser un comentario, no una respuesta, ¿no?
— Bob Diego

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.