Чи є спосіб надіслати відформатовані HTML електронні листи за допомогою функції wp_mail Wordpress?


41

Чи є action_hook чи щось подібне, що могло б допомогти мені досягти цього?

Я спробував додати розмітку в змінній рядка PHP і просто запустив електронний лист із функцією wp_mail, як:

$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);

Але він виявився як простий текст?

Будь-які ідеї?

Відповіді:


58

зі сторінки кодексу wp_mail :

Типовим типом вмісту є "text / plain", який не дозволяє використовувати HTML. Однак ви можете встановити тип вмісту електронної пошти за допомогою фільтра '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
Хм звучить корисно. Просто питання, якась конкретна причина, чому ви назвали свою функцію wpse27856_set_content_type?
racl101

14
Ні, це просто унікальна назва, заснована на ідентифікаторі цього конкретного питання. wpse = wp stachexchange, 27856 - ідентифікатор цього питання в URL-адресі. Я просто роблю це, щоб уникнути можливих зіткнень, якщо люди копіюють / вставляють код звідси.
Міло

2
Ви також можете просто включити Тип вмісту у заголовки електронної пошти. Перевірте, як це робить плагін Notifly.
Отто

о так, ха-ха. Який я n00b. Здогадайтесь, це ідентифікатор цієї посади.
racl101

1
Це порушить електронну пошту для скидання пароля, оскільки посилання для скидання міститься в <>.
Саймон Йозеф Кок

90

В якості альтернативи ви можете вказати HTTP-заголовок Content-Type у параметрі $ 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
Це працює краще, оскільки add_filter іноді показує як вкладення. Дякую, що поділились!
deepakssn

10

Не забудьте видалити фільтр типу вмісту після використання функції wp_mail. Після прийняття назви відповіді ви повинні зробити це після виконання wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Перевірте цей квиток тут - Скиньте тип вмісту, щоб уникнути конфліктів - http://core.trac.wordpress.org/ticket/23578


7
Це має бути коментар, а не відповідь, ні?
Боб Дієго

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.