Apakah ada cara untuk mengirim email berformat HTML dengan fungsi wp_mail Wordpress?

41

Apakah ada action_hook atau hal serupa yang dapat membantu saya mencapai ini?

Saya mencoba menambahkan markup dalam variabel string PHP dan baru saja melepaskan email dengan fungsi wp_mail seperti:

$email_to = '[email protected]';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Tapi itu muncul sebagai plaintext?

Ada ide?

racl101
sumber

Jawaban:

58

dari halaman codex wp_mail :

Jenis konten default adalah 'teks / polos' yang tidak diizinkan menggunakan HTML. Namun, Anda dapat mengatur jenis konten email dengan menggunakan filter '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' );
Milo
sumber
1
Hmm terdengar bermanfaat. Hanya pertanyaan, alasan khusus mengapa Anda menamai fungsi Anda wpse27856_set_content_type?
racl101
14
Tidak, itu hanya nama unik berdasarkan id dari pertanyaan khusus ini. wpse = wp stachexchange, 27856 adalah id dari pertanyaan ini di URL. Saya hanya melakukan itu untuk menghindari potensi tabrakan jika orang menyalin / menempelkan kode keluar dari sini.
Milo
2
Anda juga bisa memasukkan Tipe-Konten ke dalam header email Anda. Lihat bagaimana plugin Notifly melakukannya.
Otto
oh ya, ha ha. Betapa n00b saya. Kira itu adalah id dari posting ini.
racl101
1
Ini akan memecah email pengaturan ulang kata sandi Anda, karena tautan reset dimasukkan ke dalam <>.
Simon Josef Kok
90

Sebagai alternatif, Anda dapat menentukan header HTTP Tipe Konten di parameter $ header:

$to = '[email protected]';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );
Permata
sumber
2
Ini berfungsi lebih baik karena kadang-kadang add_filter ditampilkan sebagai lampiran. Terima kasih telah berbagi!
deepakssn
10

Jangan lupa untuk menghapus filter tipe konten setelah Anda menggunakan fungsi wp_mail. Mengikuti penamaan jawaban yang diterima Anda harus melakukan ini setelah wp_mail dijalankan:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Periksa tiket ini di sini - Atur ulang tipe konten untuk menghindari konflik - http://core.trac.wordpress.org/ticket/23578

0v3rth3d4wn
sumber
7
Ini harus berupa komentar, bukan jawaban, bukan?
Bob Diego