Je souhaite ajouter un en-tête supplémentaire aux e-mails sortants sur mes sites, afin de pouvoir facilement déterminer quel site a envoyé un e-mail donné. (J'ai mis un plugin de fonctionnalité standard sur tous mes sites, donc c'est assez facile à faire, et configurer mon client de messagerie pour filtrer et autrement agir sur cet en-tête serait un gain de temps incroyable.)
Je pensais que ce serait une simple question de se connecter à la wp_mail
fonction, mais ce n'est évidemment pas le cas.
Tout d'abord, j'ai essayé ceci:
add_filter('wp_mail', 'ws_add_site_header');
function ws_add_site_header() {
return array('headers' => 'X-WU-Site: ' . parse_url(get_site_url(), PHP_URL_HOST));
}
Ici, mon tableau a pris le pas sur tout ce qui a modifié les paramètres de messagerie (par exemple, Gravity Forms), donc les e-mails HTML ont commencé à apparaître sous forme de code HTML brut et pas correctement formatés. Cela a du sens, car l'en-tête Content-type: que GF a ajouté a été nettoyé. Mais mon en-tête a été ajouté à l'e-mail. Étant donné que d'autres dépendent également de la réception de jolis e-mails (tous les développeurs de contenu et les utilisateurs finaux de mes sites, entre autres, je suis sûr), ce n'est pas acceptable.
Un de mes collègues a ensuite suggéré d'acheminer mes affaires via wp_parse_args (), ainsi:
add_filter('wp_mail', 'ws_add_site_header');
function ws_add_site_header($args) {
$new_header = array('headers' => 'X-WU-Site: ' . parse_url(get_site_url(), PHP_URL_HOST));
return wp_parse_args($args, $new_header);
}
Avec cela, c'est comme si ma fonction n'existait pas - mon en-tête n'est pas ajouté, mais les en-têtes et les paramètres de messagerie des autres ne sont pas supprimés.
Quelle est la bonne façon d'ajouter un en-tête à un e-mail sortant, sans brouiller les autres filtres qui pourraient exister?