Я хочу добавить дополнительный заголовок к исходящим письмам на моих сайтах, чтобы я мог легко определить, на какой сайт отправлено данное письмо. (Я установил стандартный функциональный плагин на все мои сайты, так что это достаточно просто сделать, и настройка моего почтового клиента для фильтрации и других действий с этим заголовком позволила бы сэкономить время.)
Я думал, что это будет простой вопрос подключения к wp_mail
функции, но, очевидно, это не так.
Сначала я попробовал это:
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));
}
Здесь мой массив имел приоритет над всем остальным, что изменяло настройки почты (скажем, Gravity Forms), поэтому электронные письма в формате HTML начали отображаться в виде чистого HTML, а не в хорошем формате. Имеет смысл, поскольку заголовок Content-type:, добавленный GF, был очищен. Но мой заголовок был добавлен в электронное письмо. Поскольку другие также зависят от получения красивых писем (я уверен, что все разработчики и конечные пользователи моих сайтов), это неприемлемо.
Затем один из моих коллег предложил направить мои вещи через wp_parse_args (), таким образом:
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);
}
При этом создается впечатление, что моя функция не существует - мой заголовок не добавляется, но также не удаляются заголовки других пользователей и настройки почты.
Как правильно добавить заголовок к исходящему письму, не прибегая к каким-либо другим фильтрам, которые могут существовать?
Ответы:
Благодаря вышесказанному я осознал свою главную ошибку - я не совсем понял, что передаваемые аргументы были многомерным массивом.
На данный момент я повторно реализовал функцию таким образом:
Мое чтение источника wp_mail () (см .: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/pluggable.php#L235 ) заставляет меня поверить, что заголовки компонент может быть массивом, или большой строкой, или, возможно, какой-то ужасной смесью из двух, но использование массива, вероятно, является более безопасным / более правильным вариантом.
Мне нравятся разные ответы phpmailer, но мне кажется, что пытаться делать что-то, используя встроенные WordPress, немного чище.
источник
Вот альтернатива, использующая непосредственно
AddCustomHeader
методPHPMailer
экземпляра:Здесь мы видим, что его можно использовать двумя способами:
Пример № 1:
Здесь мы только передаем информацию заголовка во
$name
входную строку, которая отделена:
Пример № 2:
Вот
$name
и$value
непустые:источник
$args['headers'] = 'key: value'
через WP-фильтры?phpmailer_init
крючке срабатывает позднее , чем приwp_mail
применении фильтра и пользовательские заголовки из этого фильтра, также добавляются черезAddCustomHeader()
метод, насколько я понимаю. @sumitPHP
headers
это строки. Вы не можете разобрать их как массив. Вам нужно добавить дополнительный заголовок в виде строки,\r\n
чтобы убедиться, что он добавлен в следующей строке.Пример:
Также, пожалуйста, обратите внимание, добавьте вам, наконец, дополнительные заголовки с приоритетом,
99
чтобы никакой другой плагин не мог заменить его, если он не проверяет, что заголовки уже присутствуют. При необходимости сделайте это999
.источник
wp_mail
принимает массив для аргумента заголовка, и WP позаботится о добавлении \ r \ nPHP headers
не то, чтоwp_mail
принять. Наконец, заголовки - это строки. То, чтоwp_mail
принимает, не было вопросом! @JanBeck