Czy istnieje sposób wysyłania wiadomości e-mail w formacie HTML za pomocą funkcji wp_mail programu Wordpress?

41

Czy istnieje hak akcji lub coś podobnego, co mogłoby mi to pomóc?

Próbowałem dodać znacznik do zmiennej łańcuchowej PHP i po prostu odpaliłem wiadomość e-mail za pomocą funkcji wp_mail:

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

Ale pojawił się jako zwykły tekst?

Jakieś pomysły?

racl101
źródło

Odpowiedzi:

58

ze strony kodeksu wp_mail :

Domyślny typ zawartości to „tekst / zwykły”, który nie pozwala na używanie HTML. Można jednak ustawić typ zawartości wiadomości e-mail za pomocą filtra „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
źródło
1
Hmm brzmi użytecznie. Tylko pytanie, jakiś konkretny powód, dla którego nazwałeś swoją funkcję wpse27856_set_content_type?
racl101,
14
Nie, to tylko unikalna nazwa oparta na id tego konkretnego pytania. wpse = wp stachexchange, 27856 jest id tego pytania w adresie URL. Po prostu robię to, aby uniknąć potencjalnych kolizji, jeśli ludzie skopiują / wkleją kod stąd.
Milo,
2
Możesz także dołączyć Content-Type do nagłówków wiadomości e-mail. Sprawdź, jak robi to wtyczka Notifly.
Otto
o tak, ha ha. Jakim jestem n00b. Zgadnij, to identyfikator tego wpisu.
racl101,
1
Spowoduje to uszkodzenie wiadomości e-mail dotyczącej resetowania hasła, ponieważ link resetowania jest zawarty w <>.
Simon Josef Kok
90

Alternatywnie możesz określić nagłówek HTTP Content-Type w parametrze $ 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 );
Klejnot
źródło
2
Działa to lepiej, ponieważ filtr add_filter czasami wyświetla się jako załącznik. Dzięki za udostępnienie!
deepakssn
10

Nie zapomnij usunąć filtru typu zawartości po użyciu funkcji wp_mail. Po zaakceptowaniu nazewnictwa odpowiedzi powinieneś to zrobić po wykonaniu wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Sprawdź ten bilet tutaj - Zresetuj typ zawartości, aby uniknąć konfliktów - http://core.trac.wordpress.org/ticket/23578

0v3rth3d4wn
źródło
7
To powinien być komentarz, a nie odpowiedź, nie?
Bob Diego