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