Est-il possible d'envoyer des courriers électroniques au format HTML avec la fonction wp_mail de Wordpress?


41

Y at-il un action_hook ou quelque chose de similaire qui pourrait m'aider à atteindre cet objectif?

J'ai essayé d'ajouter du balisage dans une variable de chaîne PHP et je viens de lancer un email avec la fonction wp_mail comme ceci:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Mais cela est apparu en clair?

Des idées?

Réponses:


58

depuis la page de codex wp_mail :

Le type de contenu par défaut est 'text / plain', ce qui n'autorise pas l'utilisation de HTML. Toutefois, vous pouvez définir le type de contenu de l'e-mail à l'aide du filtre "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' );

1
Hmm semble utile. Juste une question, une raison particulière pour laquelle vous avez nommé votre fonction wpse27856_set_content_type?
Racl101

14
Non, c'est juste un nom unique basé sur l'identifiant de cette question particulière. wpse = wp stachexchange, 27856 est l'id de cette question dans l'URL. Je fais juste cela pour éviter des collisions potentielles si les gens copient / collent le code d'ici.
Milo

2
Vous pouvez également simplement inclure le type de contenu dans vos en-têtes de courrier électronique. Découvrez comment le plugin Notifly le fait.
Otto

ah oui ah ah Quel n00b je suis. Devinez c'est l'identifiant de ce post.
Racl101

1
Votre courrier électronique de réinitialisation de mot de passe sera rompu, car le lien de réinitialisation est encapsulé dans <>.
Simon Josef Kok

92

Vous pouvez également spécifier l'en-tête HTTP Content-Type dans le paramètre $ headers:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
Cela fonctionne mieux car le add_filter montre parfois en pièce jointe. Merci d'avoir partagé!
deepakssn

10

N'oubliez pas de supprimer le filtre de type de contenu après avoir utilisé la fonction wp_mail. Après avoir nommé la réponse, vous devriez le faire après l'exécution de wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Vérifiez ce billet ici - Réinitialisez le type de contenu pour éviter les conflits - http://core.trac.wordpress.org/ticket/23578


7
Cela devrait être un commentaire, pas une réponse, non?
Bob Diego

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.