Có cách nào để gửi email được định dạng HTML bằng chức năng wp_mail của Wordpress không?


41

Có một action_hook hoặc một cái gì đó tương tự có thể giúp tôi đạt được điều này?

Tôi đã thử thêm đánh dấu vào một biến chuỗi PHP và vừa loại bỏ một email có hàm wp_mail như vậy:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Nhưng nó xuất hiện như bản rõ?

Có ý kiến ​​gì không?

Câu trả lời:


58

từ trang mã wp_mail :

Loại nội dung mặc định là 'văn bản / thuần túy' không cho phép sử dụng HTML. Tuy nhiên, bạn có thể đặt loại nội dung của email bằng cách sử dụng bộ lọc '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' );

1
Hmm âm thanh hữu ích. Chỉ là một câu hỏi, bất kỳ lý do cụ thể tại sao bạn đặt tên hàm của bạn là wpse27856_set_content_type?
racl101

14
Không, đó chỉ là một tên duy nhất dựa trên id của câu hỏi cụ thể này. wpse = wp stachexchange, 27856 là id của câu hỏi này trong URL. Tôi chỉ làm điều đó để tránh va chạm tiềm năng nếu mọi người sao chép / dán mã ra khỏi đây.
Milo

2
Bạn cũng có thể bao gồm Kiểu nội dung trong tiêu đề email của mình. Kiểm tra các plugin Notifly làm điều đó.
Otto

oh vâng, ha ha. Tôi là một n00b. Đoán nó là id của bài viết này.
racl101

1
Điều này sẽ phá vỡ email đặt lại mật khẩu của bạn, vì liên kết đặt lại được gói trong <>.
Simon Josef Kok

90

Thay vào đó, bạn có thể chỉ định tiêu đề HTTP Kiểu nội dung trong tham số $ headers:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
Điều này hoạt động tốt hơn khi add_filter đôi khi hiển thị dưới dạng tệp đính kèm. Cám ơn vì đã chia sẻ!
deepakssn

10

Đừng quên xóa bộ lọc loại nội dung sau khi bạn sử dụng chức năng wp_mail. Theo cách đặt tên câu trả lời được chấp nhận, bạn nên thực hiện việc này sau khi wp_mail được thực thi:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Kiểm tra vé này tại đây - Đặt lại loại nội dung để tránh xung đột - http://core.trac.wordpress.org/ticket/23578


7
Đây có nên là một bình luận, không phải là một câu trả lời, không?
Bob Diego

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.