Saya ingin menambahkan header tambahan ke email keluar di situs saya, jadi saya dapat dengan mudah menentukan situs mana yang mengirim email yang diberikan. (Saya meletakkan plugin fungsionalitas standar di semua situs saya, jadi ini cukup mudah untuk dilakukan, dan mengonfigurasi klien email saya untuk difilter dan jika tidak bertindak pada tajuk ini akan menghemat waktu yang luar biasa.)
Saya pikir ini akan menjadi masalah sederhana memasukkan ke dalam wp_mail
fungsi, tetapi ternyata tidak.
Pertama, saya mencoba ini:
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));
}
Di sini, array saya lebih diutamakan daripada yang lain yang mengubah pengaturan email (katakanlah, Gravity Forms), jadi email HTML mulai muncul sebagai HTML kosong dan tidak diformat dengan baik. Masuk akal, karena header Tipe-konten: yang ditambahkan GF dihapus. Tetapi tajuk saya ditambahkan ke email. Karena yang lain juga bergantung pada penerimaan email yang bagus (semua pengembang konten dan pengguna akhir situs saya, antara lain saya yakin), itu tidak dapat diterima.
Salah satu kolega saya kemudian menyarankan untuk merutekan barang-barang saya melalui wp_parse_args (), jadi:
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);
}
Dengan itu, seolah-olah fungsi saya tidak ada - tajuk saya tidak ditambahkan, tetapi tajuk dan pengaturan surat lainnya juga tidak dicopot.
Apa cara yang benar untuk menambahkan header ke email keluar, tanpa mengacaukan filter lain yang mungkin ada?
Jawaban:
Berkat hal di atas, saya menyadari kesalahan sentral saya - saya tidak begitu menyadari bahwa argumen yang diajukan adalah array multi-dimensi.
Untuk saat ini, saya telah mengimplementasikan kembali fungsi sebagai berikut:
Saya membaca sumber wp_mail () (lihat: https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/pluggable.php#L235 ) membuat saya percaya bahwa header tersebut komponen bisa berupa array, atau string besar, atau mungkin mish-mash yang mengerikan dari keduanya, tetapi menggunakan array mungkin merupakan opsi yang lebih aman / lebih benar.
Saya memang suka berbagai jawaban phpmailer, tetapi sepertinya sedikit lebih bersih untuk mencoba melakukan hal-hal menggunakan built-in WordPress.
sumber
Berikut ini adalah alternatif menggunakan langsung
AddCustomHeader
metodePHPMailer
instance:Di sini kita dapat melihat bahwa ada dua cara untuk menggunakannya:
Contoh 1:
Di sini kita hanya meneruskan informasi header di
$name
string input, yang dipisahkan dengan:
Contoh # 2:
Ini keduanya
$name
dan$value
tidak kosong:sumber
$args['headers'] = 'key: value'
melalui filter WP?phpmailer_init
kait kebakaran lambat ketikawp_mail
penyaring diterapkan dan header kustom dari filter yang juga ditambahkan melaluiAddCustomHeader()
metode, sejauh yang saya mengerti. @sumitPHP
headers
adalah string. Anda tidak dapat menguraikannya sebagai array. Anda perlu menambahkan tajuk tambahan sebagai string dengan\r\n
untuk memastikannya ditambahkan di baris berikutnya.Contoh:
Harap perhatikan juga menambahkan Anda header tambahan pada akhirnya dengan prioritas
99
sehingga tidak ada plugin lain yang dapat menggantikannya jika tidak memeriksa bahwa header sudah ada. Jika perlu, buatlah999
.sumber
wp_mail
menerima larik untuk argumen tajuk dan WP akan menangani penambahan \ r \ nPHP headers
bukan yangwp_mail
menerima. Terakhir header adalah string. Apa yangwp_mail
diterima bukan pertanyaannya! @ JanBeck