Existe uma maneira de enviar e-mails formatados em HTML com a função wp_mail do Wordpress?

41

Existe um action_hook ou algo semelhante que poderia me ajudar a conseguir isso?

Eu tentei adicionar marcação em uma variável de string PHP e apenas enviei um email com a função wp_mail da seguinte forma:

$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);

Mas ele apareceu como texto simples?

Alguma ideia?

racl101
fonte

Respostas:

58

da página do codex wp_mail :

O tipo de conteúdo padrão é 'text / plain', que não permite o uso de HTML. No entanto, você pode definir o tipo de conteúdo do email usando o 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
fonte
11
Hmm parece útil. Apenas uma pergunta, algum motivo específico para você nomear sua função wpse27856_set_content_type?
racl101
14
Não, é apenas um nome exclusivo, com base no ID dessa pergunta em particular. wpse = wp stachexchange, 27856 é o ID desta pergunta no URL. Eu apenas faço isso para evitar possíveis colisões se as pessoas copiarem / colarem código daqui.
Milo
2
Você também pode incluir apenas o Tipo de conteúdo nos cabeçalhos de email. Veja como o plugin Notifly faz isso.
Otto
ah sim, ha ha. Que n00b eu sou. Acho que é o id deste post.
racl101
11
Isso quebrará seu e-mail de redefinição de senha, porque o link de redefinição está agrupado em <>.
Simon Josef Kok
90

Como alternativa, você pode especificar o cabeçalho HTTP do tipo de conteúdo no 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 );
Jóia
fonte
2
Isso funciona melhor, pois o add_filter às vezes mostra como anexo. Obrigado por compartilhar!
deepakssn
10

Não se esqueça de remover o filtro de tipo de conteúdo depois de usar a função wp_mail. Após a nomeação de resposta aceita, você deve fazer isso após a execução do wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Verifique este ticket aqui - Redefina o tipo de conteúdo para evitar conflitos - http://core.trac.wordpress.org/ticket/23578

0v3rth3d4wn
fonte
7
Isso deve ser um comentário, não uma resposta, não?
Bob Diego