web-dev-qa-db-fra.com

Inclure le fichier de modèle HTML dans le courrier wp

J'utilise wp mail pour envoyer un email html. Mais il y a beaucoup de code html dans l'e-mail, alors plutôt que d'inclure tout le code dans ma fonction mail wp, est-il possible d'avoir le code dans un modèle séparé et d'inclure simplement ce modèle dans la fonction? Voici ce que j'ai

<?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);
}?>

J'aimerais pouvoir mettre tout mon code HTML dans "my_email_template", mais lorsque j'essaie, aucun courrier électronique n'est envoyé. Suis-je inclure le modèle de manière incorrecte? Merci d'avance pour n'importe quelle réponse.

2
Xav

Selon mon commentaire à votre question, je pense que le problème est que les fichiers includeing, que ce soit directement ou en utilisant get_template_part, ne sont pas susceptibles de vous donner une chaîne à transmettre à $body et cela va provoquer des erreurs dans le code comportement inattendu.

J'éviterais de lire les fichiers en mémoire et créerais simplement une fonction qui renvoie votre contenu $body.

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

Ensuite, utilisez $body = get_email_body_wpse_96357(); si nécessaire. Un avantage de cette méthode est que vous pouvez facilement passer des paramètres à la fonction si vous décidez de le faire. Vous pouvez également utiliser des variables dans un fichier inclus, mais cela peut être compliqué.

Si vous ne voulez pas charger cette fonction tout le temps, placez-le dans un fichier et n'incluez ce fichier que lorsque vous avez besoin de la fonction.

5
s_ha_dum

La fonction get_template_part() ne renvoie pas le code HTML mais l’écho (elle utilise locate_template() qui charge le fichier - echo).

Vous pouvez soit activer la mise en tampon de sortie en utilisant ob_start() et la mettre en mémoire tampon dans votre variable, soit utiliser file_get_contents() .

Dans votre cas, je pense que la meilleure solution est la suivante:

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

Voici l'exemple de code d'utilisation de la mise en mémoire tampon de sortie. Vous pourrez accéder à toutes les variables du modèle définies ci-dessus "ligne à inclure".

WordPress: inclure un modèle dans l'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, "Booking details", $email_content, $headers);
0
Mayur Chauhan