Вопрос или проблема
Существует ли action_hook или что-то подобное, что могло бы помочь мне достичь этого?
Я попытался добавить разметку в переменную строкового типа PHP и просто отправил электронное письмо с помощью функции wp_mail()
следующим образом:
$email_to = '[email protected]';
$email_subject="Тема письма";
$email_body = "<html><body><h1>Привет, мир!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);
Но это появилось как обычный текст?
Какие идеи?
Тип содержимого по умолчанию – ‘text/plain’, который не позволяет использовать HTML. Однако вы можете установить тип содержимого email, используя фильтр ‘wp_mail_content_type’.
// В файле functions.php темы или в коде плагина:
function wpse27856_set_content_type(){
return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Теперь каждый раз, когда вызывается wp_mail
, будь то в вашем коде, в коде WordPress, в коде плагина или в коде темы, тип MIME будет установлен как text/html
. Если есть какие-либо вызовы wp_mail
, которые отправляют обычный текст, эти вызовы теперь будут нарушены. Так что будьте осторожны.
В качестве альтернативы вы можете указать заголовок HTTP Content-Type в параметре $headers:
$to = '[email protected]';
$subject="Тема";
$body = 'Содержимое тела письма';
$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="Тема письма";
// <<<EOD это синтаксис PHP heredoc
$email_body = <<<EOD
Это ваш новый <b style="color: red; font-style: italic;">пароль</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 = 'Адрес электронной почты';
$subject="Ваша тема";
ob_start();
include(get_stylesheet_directory() . '/email-template.php');//Путь к шаблону файла
$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 мы также сэкономим время на загрузке файла.
Ответ или решение
Отправка HTML-форматированных писем с помощью функции wp_mail()
в WordPress – это задача, которая часто возникает при разработке различных плагинов и тем. Функция wp_mail()
по умолчанию отправляет письма в текстовом формате, что может вызвать разочарование, если вы хотите включить элементы HTML для оформления ваших писем. Ниже представлено подробное руководство о том, как это сделать.
Изменение типа контента
Для того чтобы отправить HTML-письмо, необходимо установить заголовок Content-Type
в значение text/html
. Это можно сделать несколькими способами:
1. Использование фильтра wp_mail_content_type
Создайте функцию в файле functions.php
вашей темы или в коде плагина:
function wpse27856_set_content_type(){
return "text/html";
}
add_filter('wp_mail_content_type', 'wpse27856_set_content_type');
После этого, вызов функции wp_mail()
будет автоматически устанавливать заголовок Content-Type
в text/html
. Однако будьте осторожны: этот фильтр будет применяться к каждому вызову wp_mail()
, что может вызвать конфликты, если другие функции ожидают текстовой версии.
После отправки письма рекомендуется убрать фильтр:
remove_filter('wp_mail_content_type', 'wpse27856_set_content_type');
2. Указание заголовков напрямую
Альтернативный способ – это передать заголовок непосредственно в $headers
параметре функции wp_mail()
:
$email_to = 'example@example.com';
$email_subject = 'Тема письма';
$email_body = '<html><body><h1>Привет, мир!</h1></body></html>';
$headers = array('Content-Type: text/html; charset=UTF-8');
$send_mail = wp_mail($email_to, $email_subject, $email_body, $headers);
Этот метод позволяет вам гибко настраивать, какие письма отправляются в формате HTML, не изменяя поведение других функций wp_mail()
.
Использование Heredoc синтаксиса
Для более удобного написания многопозиционных HTML-строк, вы можете использовать синтаксис Heredoc:
$email_body = <<<EOD
<html>
<body>
<h1 style="color: red;">Ваш новый <b>пароль</b> : {$password}</h1>
</body>
</html>
EOD;
Шаблон письма с использованием ob_start
Если ваше HTML-содержимое достаточно сложное или вы хотите включить в него переменные WordPress, рекомендуется создать отдельный файл шаблона:
$to = 'example@example.com';
$subject = "Ваша Тема";
ob_start();
include(get_stylesheet_directory() . '/email-template.php'); // Путь к шаблону
$body = ob_get_contents();
ob_end_clean();
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to, $subject, $body, $headers);
Использование ob_start()
позволяет вам вставлять непосредственно HTML с динамическим содержимым из WordPress в ваш шаблон.
Заключение
Отправка HTML-форматированных писем с помощью wp_mail()
в WordPress не является сложной задачей при условии использования правильных методов. Вы можете установить заголовок контента либо через фильтр, либо непосредственно в параметрах функции. Также, использование файлов шаблонов и Heredoc синтаксиса облегчит процесс создания и поддержки ваших писем. Этот подход не только сделает ваш код более чистым и управляемым, но и повысит общую функциональность ваших уведомлений.
Такая гибкость становится особенно полезной, когда вы стремитесь к улучшению пользовательского опыта и хотите сделать ваши письма более привлекательными для получателей.