Есть ли способ отправлять электронные письма в формате HTML с помощью функции wp mail() WordPress?
Есть ли action_hook или что-то подобное, что могло бы помочь мне достичь этого?
Я попытался добавить разметку в строковую переменную PHP и просто отправил электронное письмо с функцией wp_mail()
примерно так:
$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);
Но оно появилось как обычный текст?
Есть идеи?
5 answers
Со страницы кодекса wp_mail:
Тип контента по умолчанию - "текст/обычный", который не позволяет использовать 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' );
В качестве альтернативы вы можете указать HTTP-заголовок типа содержимого в параметре $headers:
$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 );
Не забудьте удалить фильтр типов контента после использования функции wp_mail. Следуя принятому названию ответа, вы должны сделать это после выполнения wp_mail:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Проверьте этот билет здесь - Сбросьте тип содержимого, чтобы избежать конфликтов -- http://core.trac.wordpress.org/ticket/23578
Еще один простой способ, которым я собираюсь поделиться ниже. Даже вы можете оформить тело своей почты по своему желанию. Может быть, это полезно для вас.
$email_to = '[email protected]';
$email_subject = 'Email subject';
// <<<EOD it is PHP heredoc syntax
$email_body = <<<EOD
This is your new <b style="color: red; font-style: italic;">password</b> : {$password}
EOD;
$headers = ['Content-Type: text/html; charset=UTF-8'];
$send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
Подробнее о синтаксисе PHP heredoc https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
Используйте ob_start
, потому что это позволит вам использовать переменные/функции WP, такие как bloginfo и т.д.
Создайте PHP-файл и вставьте свой HTML-код в этот файл (при необходимости используйте переменные wp внутри этого php-файла).
Используйте приведенный ниже код:
$to = 'Email Address';
$subject = 'Your Subject';
ob_start();
include(get_stylesheet_directory() . '/email-template.php');//Template File Path
$body = ob_get_contents();
ob_end_clean();
$headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>');
wp_mail( $to, $subject, $body, $headers );
Это сохранит ваш код в чистоте, а благодаря ob_start мы также сэкономим время загрузки файла.