¿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 = '[email protected]';
$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?

racl101
fuente

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' );
Milo
fuente
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 = '[email protected]';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );
Joya
fuente
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

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