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.