Есть ли способ отправлять электронные письма в формате 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);

Но оно появилось как обычный текст?

Есть идеи?

Author: butlerblog, 2011-09-06

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' );
 71
Author: Milo, 2018-03-18 13:29:30

В качестве альтернативы вы можете указать 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 );
 126
Author: Jewel, 2015-07-26 15:01:32

Не забудьте удалить фильтр типов контента после использования функции wp_mail. Следуя принятому названию ответа, вы должны сделать это после выполнения wp_mail:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Проверьте этот билет здесь - Сбросьте тип содержимого, чтобы избежать конфликтов -- http://core.trac.wordpress.org/ticket/23578

 14
Author: 0v3rth3d4wn, 2015-01-02 14:25:25

Еще один простой способ, которым я собираюсь поделиться ниже. Даже вы можете оформить тело своей почты по своему желанию. Может быть, это полезно для вас.

$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

 0
Author: Jilani A, 2020-04-05 05:39:47

Используйте 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 мы также сэкономим время загрузки файла.

 -1
Author: pranav shinde, 2020-03-05 03:28:13