Desejo adicionar um cabeçalho adicional aos emails de saída em meus sites, para que eu possa determinar facilmente qual site enviou um determinado email. (Eu coloquei um plug-in de funcionalidade padrão em todos os meus sites, para que isso seja fácil o suficiente, e configurar meu cliente de email para filtrar e agir nesse cabeçalho seria uma economia de tempo incrível.)
Eu pensei que isso seria uma simples questão de conectar-se à wp_mail
função, mas evidentemente não é.
Primeiro, tentei o seguinte:
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));
}
Aqui, minha matriz teve precedência sobre qualquer outra coisa que modificasse as configurações de correio (por exemplo, Gravity Forms), de modo que os emails em HTML começaram a aparecer como HTML simples e não foram bem formatados. Faz sentido, uma vez que o cabeçalho Content-type: que a GF adicionou foi limpo. Mas meu cabeçalho foi adicionado ao email. Como outros também dependem de receber e-mails bonitos (todos os desenvolvedores de conteúdo e usuários finais dos meus sites, entre outros, tenho certeza), isso não é aceitável.
Um dos meus colegas sugeriu encaminhar minhas coisas por wp_parse_args (), assim:
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);
}
Com isso, é como se minha função não existisse - meu cabeçalho não foi adicionado, mas os cabeçalhos e as configurações de email de outras pessoas não foram removidos.
Qual é a maneira correta de adicionar um cabeçalho a um email de saída, sem embaralhar outros filtros que possam existir?
Respostas:
Graças ao exposto, percebi meu erro central - não percebi que os argumentos passados eram uma matriz multidimensional.
Por enquanto, reimplementei a função assim:
Minha leitura da fonte wp_mail () (consulte: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/pluggable.php#L235 ) me leva a acreditar que os cabeçalhos O componente pode ser um array, ou uma string grande, ou possivelmente uma mistura horrível dos dois, mas o uso de um array é provavelmente a opção mais segura / correta.
Eu gosto das várias respostas do phpmailer, mas parece um pouco mais limpo tentar fazer as coisas usando os built-ins do WordPress.
fonte
Aqui está uma alternativa usando diretamente o
AddCustomHeader
método daPHPMailer
instância:Aqui podemos ver que existem duas maneiras de usá-lo:
Exemplo 1:
Aqui, apenas passamos as informações do cabeçalho na
$name
string de entrada, separadas por:
Exemplo 2:
Aqui estão ambos
$name
e$value
não estão vazios:fonte
$args['headers'] = 'key: value'
por meio de filtros WP?phpmailer_init
gancho é acionado mais tarde do que quando owp_mail
filtro é aplicado e os cabeçalhos personalizados desse filtro também são adicionados peloAddCustomHeader()
método, tanto quanto eu o entendo. @sumitPHP
headers
são strings. Você não pode analisá-los como matriz. Você precisa adicionar seu cabeçalho adicional como string\r\n
para garantir que ele seja adicionado na próxima linha.Exemplo:
Observe também que você finalmente adiciona cabeçalhos adicionais com prioridade,
99
para que nenhum outro plug-in possa substituí-lo se não estiver verificando se os cabeçalhos já estão presentes. Se necessário, faça999
.fonte
wp_mail
aceita uma matriz para o argumento de cabeçalho e WP vai cuidar de adicionar \ r \ nPHP headers
não o quewp_mail
aceita. Finalmente, cabeçalhos são strings. O quewp_mail
aceita não foi a questão! @JanBeck