Includerea unui fișier șablon HTML în wp_mail
Folosesc wp_mail()
pentru a trimite un email HTML. Dar există destul de mult cod HTML în email, așa că în loc să includ tot codul în funcția wp_mail()
, este posibil să am codul într-un șablon separat și să includ doar acest șablon în funcție? Iată ce am:
<?php if ( isset( $_POST['submitted'] )) {
add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
$emailTo = 'person@gmail.com' ;
$subject = 'Acesta este subiectul';
$body = get_template_part( 'includes/my_email_template' );
$headers = 'From: Numele Meu' . "\r\n";
wp_mail($emailTo, $subject, $body, $headers);
}?>
Aș dori să pot pune tot codul meu HTML în 'my_email_template' dar când încerc asta, nu se trimite niciun email. Includ șablonul incorect? Mulțumesc anticipat pentru orice răspunsuri.

Iată codul exemplu pentru utilizarea buffer-ului de ieșire. Veți putea accesa toate variabilele din template care sunt definite înaintea liniei de "include".
WordPress: Include template în e-mail.
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, "Detalii rezervare", $email_content, $headers);

Aceasta este cea mai ușoară metodă de a personaliza wp_mail până acum

Conform comentariului meu la întrebarea ta, cred că problema este că include
fișiere, fie direct sau folosind get_template_part
, nu este probabil să îți ofere un șir de caractere pentru a-l transmite la $body
și asta va cauza erori în cod, sau cel puțin un comportament neașteptat.
Aș evita citirea fișierelor în memorie și aș crea o funcție care returnează conținutul pentru $body
.
function get_email_body_wpse_96357() {
$body = '<p>Salut</p>';
return $body;
}
Apoi folosește $body = get_email_body_wpse_96357();
după necesitate. Un avantaj al acestei metode este că poți pasa cu ușurință parametri funcției dacă vei decide să faci asta. Ai putea folosi și variabile într-un fișier inclus, dar poate deveni complicat.
Dacă nu vrei să încarci acea funcție tot timpul, atunci pune-o într-un fișier separat și include acel fișier doar când ai nevoie de funcție.

Funcția get_template_part()
nu returnează HTML-ul ci îl afișează (folosește locate_template()
care încarcă fișierul - echo).
Puteți fie să activați bufferizarea output-ului folosind ob_start()
și să puneți buffer-ul în variabila dvs. sau puteți folosi file_get_contents()
.
În cazul dvs. cred că cea mai bună soluție este aceasta:
$body = file_get_contents(TEMPLATEPATH . 'includes/my_email_template.php');

Mulțumesc pentru răspunsul tău ItayXD, dar acum am reușit să fac să funcționeze folosind răspunsul de mai sus

Am văzut, răspunsul de mai sus este mult inferior IMO. Funcția file_get_contents este exact ceea ce căutai și este mult mai ușor să scrii fișierul html în mod normal decât să folosești soluția de mai sus. De fapt, pur și simplu nu văd cum este mai bună, văd doar dezavantajele.

Această soluție este mai curată și mai ușoară. Mult mai MVC prin faptul că logica este în functions.php și template-ul în propriul fișier.

Am văzut transmiterea variabilelor făcută folosind str_ireplace ca în str_ireplace('[username]',$user_login, $message_template); -- este aceasta ideală/cea mai bună practică? - Din acest link: http://www.avtex.com/blog/2012/03/14/creating-dynamic-html-e-mail-templates-in-wordpress/
