WordPress по умолчанию использует текстовый формат text/plain
для писем, отправляемых с помощью функции wp_mail()
. Это означает, что HTML-код в сообщениях не будет распознан. Хук wp_mail_content_type
позволяет изменить тип контента для email, чтобы включить HTML или другие форматы.
apply_filters( 'wp_mail_content_type', string $content_type );
Хук wp_mail_content_type
предоставляет возможность задать MIME-тип для писем. Это особенно полезно, если необходимо использовать HTML-форматирование для email-сообщений, улучшая их внешний вид.
Параметры
- $content_type (
string
): MIME-тип контента письма. По умолчанию установлен вtext/plain
. Часто используетсяtext/html
для HTML-писем, но также возможны другие типы, например,multipart/mixed
.
Пример 1: Изменение типа контента на HTML
Чтобы отправить письмо в HTML-формате, можно изменить тип контента на text/html
:
add_filter( 'wp_mail_content_type', 'set_html_content_type' );
function set_html_content_type( $content_type ) {
return 'text/html';
}
$to = '[email protected]';
$subject = 'HTML Email';
$body = '<h1>Заголовок письма</h1><p>Текст сообщения в HTML формате.</p>';
wp_mail( $to, $subject, $body );
// Сбросим тип контента, чтобы избежать конфликта с другими письмами
remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
В этом примере wp_mail()
отправит письмо в HTML-формате, что позволяет добавлять разметку и стили. После отправки контент сбрасывается на text/plain
.
Пример 2: Установка типа контента через анонимную функцию
Если нужно быстро установить тип контента без создания отдельной функции, можно использовать анонимную функцию:
add_filter( 'wp_mail_content_type', function( $content_type ) {
return 'text/html';
});
wp_mail( '[email protected]', 'Тестовое HTML-письмо', '<p>Тест HTML-сообщения с анонимной функцией.</p>' );
// Сброс фильтра
remove_filter( 'wp_mail_content_type', '__return_html' );
Здесь анонимная функция используется для задания типа text/html
, что удобно для разовых задач.
Пример 3: Выбор типа контента в зависимости от условий
В этом примере для писем, отправленных на определенный адрес, устанавливается HTML-формат, а для остальных — текстовый:
add_filter( 'wp_mail_content_type', 'conditional_mail_content_type' );
function conditional_mail_content_type( $content_type ) {
$to_address = '[email protected]';
if ( isset( $_POST['email'] ) && $_POST['email'] === $to_address ) {
return 'text/html';
}
return 'text/plain';
}
// Пример отправки письма
wp_mail( '[email protected]', 'HTML Письмо', '<p>Только для определенного пользователя.</p>' );
В данном примере тип text/html
устанавливается только для конкретного получателя, для остальных писем будет использован text/plain
.
Пример 4: Настройка HTML-формата для писем сброса пароля
WordPress обычно отправляет письма сброса пароля в формате text/plain
, что может вызвать проблемы, если вы используете HTML для всех email. Этот пример показывает, как перевести письма сброса пароля в HTML:
add_filter( 'wp_mail_content_type', 'enable_html_for_password_reset' );
function enable_html_for_password_reset() {
return 'text/html';
}
add_filter( 'retrieve_password_message', 'format_password_reset_message', 10, 1 );
function format_password_reset_message( $message ) {
$message = nl2br( esc_html( $message ) );
return $message;
}
Здесь retrieve_password_message
фильтрует сообщение, заменяя переносы строк на <br>
, что делает его совместимым с HTML.
Заключение
Хук wp_mail_content_type
позволяет гибко управлять MIME-типом email-сообщений в WordPress. С его помощью можно настроить отправку писем в HTML-формате, что улучшает их внешний вид и делает более удобными для восприятия.