Gibt es eine Möglichkeit, HTML-formatierte E-Mails mit der wp_mail-Funktion von Wordpress zu senden?

41

Gibt es einen action_hook oder etwas ähnliches, das mir dabei helfen könnte?

Ich habe versucht, Markup in eine PHP-String-Variable einzufügen und habe gerade eine E-Mail mit der Funktion wp_mail wie folgt ausgelöst:

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

Aber es zeigte sich als Klartext?

Irgendwelche Ideen?

racl101
quelle

Antworten:

58

von der wp_mail Codex Seite :

Der Standard-Inhaltstyp ist "text / plain", wodurch die Verwendung von HTML nicht möglich ist. Sie können den Inhaltstyp der E-Mail jedoch mithilfe des Filters "wp_mail_content_type" festlegen.

// 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
quelle
1
Hmm hört sich nützlich an. Nur eine Frage, einen bestimmten Grund, warum Sie Ihre Funktion wpse27856_set_content_type genannt haben?
racl101
14
Nein, es ist nur ein eindeutiger Name, der auf der ID dieser bestimmten Frage basiert. wpse = wp stachexchange, 27856 ist die ID dieser Frage in der URL. Ich mache das nur, um mögliche Kollisionen zu vermeiden, wenn Leute Code hier raus kopieren / einfügen.
Milo
2
Sie können den Inhaltstyp auch einfach in Ihre E-Mail-Header aufnehmen. Sehen Sie sich an, wie das Notifly-Plugin das macht.
Otto
oh ja, ha ha. Was für ein n00b bin ich. Schätze, es ist die ID dieses Beitrags.
racl101
1
Dadurch wird Ihre E-Mail zum Zurücksetzen des Kennworts unterbrochen, da der Link zum Zurücksetzen in <> eingeschlossen ist.
Simon Josef Kok
90

Alternativ können Sie den Content-Type-HTTP-Header im Parameter $ headers angeben:

$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 );
Juwel
quelle
2
Dies funktioniert besser, da der add_filter manchmal als Anhang angezeigt wird. Danke für das Teilen!
Deepakssn
10

Vergessen Sie nicht, den Inhaltstypfilter zu entfernen, nachdem Sie die Funktion wp_mail verwendet haben. Nach der Benennung der akzeptierten Antworten sollten Sie dies tun, nachdem wp_mail ausgeführt wurde:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Überprüfen Sie dieses Ticket hier - Setzen Sie den Inhaltstyp zurück, um Konflikte zu vermeiden - http://core.trac.wordpress.org/ticket/23578

0v3rth3d4wn
quelle
7
Dies sollte ein Kommentar sein, keine Antwort, nein?
Bob Diego