it-swarm.com.de

HTML-Vorlagendatei in WP-Mail einschließen

Ich benutze wp mail, um eine HTML-E-Mail zu senden. Aber die E-Mail enthält ziemlich viel HTML-Code. Ist es also nicht möglich, den gesamten Code in meine WP-Mail-Funktion aufzunehmen, sondern nur diese Vorlage in die Funktion aufzunehmen? Hier ist was ich habe

<?php if ( isset( $_POST['submitted'] )) {
   add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
   $emailTo = '[email protected]' ;
   $subject = 'This is the subject';
   $body = get_template_part( 'includes/my_email_template' );
   $headers = 'From: My Name' . "\r\n";
   wp_mail($emailTo, $subject, $body, $headers);
}?>

Ich möchte in der Lage sein, meinen gesamten HTML-Code in 'my_email_template' abzulegen, aber wenn ich das versuche, wird keine E-Mail gesendet. Füge ich die Vorlage falsch ein? Vielen Dank im Voraus für alle Antworten.

2
Xav

Meiner Meinung nach besteht das Problem darin, dass includeing-Dateien, ob direkt oder mit get_template_part, wahrscheinlich keine Zeichenfolge für $body enthalten und dies zu Fehlern im Code oder zumindest zu Fehlern führen wird unbeachtetes Verhalten.

Ich würde das Einlesen von Dateien in den Speicher vermeiden und einfach eine Funktion erstellen, die Ihren $body-Inhalt zurückgibt.

function get_email_body_wpse_96357() {
    $body = '<p>Hi</p>';
    return $body;
}

Verwenden Sie dann nach Bedarf $body = get_email_body_wpse_96357();. Ein Vorteil dieser Methode besteht darin, dass Sie der Funktion problemlos Parameter übergeben können, wenn Sie sich jemals dazu entschließen. Sie können auch Variablen in einer eingeschlossenen Datei verwenden, diese kann jedoch chaotisch sein.

Wenn Sie diese Funktion nicht ständig laden möchten, speichern Sie sie in einer eigenen Datei und schließen Sie diese Datei nur ein, wenn Sie die Funktion benötigen.

5
s_ha_dum

Die Funktion get_template_part() gibt den HTML-Code nicht zurück, sondern gibt ihn als Echo aus (sie verwendet locate_template(), wodurch das Datei-Echo geladen wird).

Sie können entweder die Ausgabepufferung mit ob_start() aktivieren und den Puffer in Ihre Variable einfügen, oder Sie können file_get_contents() verwenden.

In Ihrem Fall ist meiner Meinung nach die beste Lösung folgende:

$body = file_get_contents(TEMPLATEPATH . 'includes/my_email_template.php');
5
ItayXD

Hier ist der Beispielcode für die Verwendung der Ausgabepufferung. Sie können auf alle Variablen in der Vorlage zugreifen, die oben unter "include line" definiert sind.

WordPress: Vorlage in die E-Mail aufnehmen.

ob_start();
include(get_stylesheet_directory() . '/assets/email-templates/booking-details-template.php');
$email_content = ob_get_contents();
ob_end_clean();
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to_email, "Booking details", $email_content, $headers);
0
Mayur Chauhan