Intereting Posts
Удалить действие из YITH Woocommerce Платежи по вкладам и авансовым платежам Добавить пользовательский тип элемента меню Контактная форма 7 Плагин отправляет письма в мой Gmail как спам Как изменить загрузку dir для пользовательского плагина? Будет ли мой сайт запутаться, когда тема wordpress обновится, если я отредактировал HTML-код в редакторе, чтобы изменить нижний колонтитул? Как решить: произошла ошибка при загрузке Как отменить обновление плагина wordpress? улучшить мой массив, чтобы отобразить the_title, категорию, выдержку для главной страницы Как отображать категории моего пользовательского типа сообщений? как я могу изменить цикл основных архивов WP для сортировки по имени или заголовку Наиболее эффективный способ поиска значений из CPT в почтовом контенте Содержание для woocommerce_after_cart_table Как просмотреть все сообщения (на сайте, а не admin), которые не классифицированы? WordPress «Loop» с большим набором результатов Запрос Vars для главной страницы?

Использование шаблонов WordPress для html-писем

Я работаю над плагином, которому необходимо отправить электронное письмо после отправки формы.

Я использую wp_mail для этого, и он отлично работает. Моя проблема заключается в том, что в моем коде html генерируется связкой php-строки, добавляемой к переменной следующим образом:

$content = $html_headers; $content .= '<h1>' . the_title($post_id) . '</h1>'; $content .= '<p>' . $post_body . '</p>; ..etc 

В настоящее время у меня более 30 строк. И это позволяет мне, наконец, сделать:

  //add filter to allow html add_filter('wp_mail_content_type', create_function('', 'return "text/html"; ')); //Send email wp_mail( 'some@mail.com', 'mail tester', $content, 'From: some one <some@one.com>' ); //remove filter to allow html (avoids some conflict.) remove_filter('wp_mail_content_type', create_function('', 'return "text/html"; ')); 

Я бы предпочел, чтобы я мог ссылаться на отдельный файл, который использует обычные тег шаблона темы WordPress, чтобы генерировать содержимое почты. так что в отдельном файле у меня было бы что-то вроде этого:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> (headertags) </head> <body> <h1><?php the_title($post_id); ?></h1> <p><?php my_custom_template_body_tag(); ?></p> </body> </html> 

но я не знаю, как вернуть этот контент функции wp_mail (). Я попытался использовать file_get_contents (), но это просто игнорирует php сгенерированный контент, и я просмотрел синтаксис heredoc. Но я нахожу это довольно уродливым и склонным к ошибкам. У меня есть другие варианты. Мне очень нравится, если я смогу сделать что-то вроде:

 $content = parse_and_return_content_of('path/to/template/file', $arg); 

спасибо

Solutions Collecting From Web of "Использование шаблонов WordPress для html-писем"

Вы должны использовать ob_get_contents()

  ob_start(); include('template/email-header.php'); printf(__('<p>A very special welcome to you, %1$s. Thank you for joining %2$s!</p>', 'cell-email'), $greetings, get_bloginfo('name')); printf(__('<p> Your password is <strong style="color:orange">%s</strong> <br> Please keep it secret and keep it safe! </p>', 'cell-email'), $plaintext_pass); printf(__('<p>We hope you enjoy your stay at %s. If you have any problems, questions, opinions, praise, comments, suggestions, please feel free to contact us at any time</p>', 'cell-email'), get_bloginfo('name')); include('template/email-footer.php'); $message = ob_get_contents(); ob_end_clean(); wp_mail($user_email, $email_subject, $message); в  ob_start(); include('template/email-header.php'); printf(__('<p>A very special welcome to you, %1$s. Thank you for joining %2$s!</p>', 'cell-email'), $greetings, get_bloginfo('name')); printf(__('<p> Your password is <strong style="color:orange">%s</strong> <br> Please keep it secret and keep it safe! </p>', 'cell-email'), $plaintext_pass); printf(__('<p>We hope you enjoy your stay at %s. If you have any problems, questions, opinions, praise, comments, suggestions, please feel free to contact us at any time</p>', 'cell-email'), get_bloginfo('name')); include('template/email-footer.php'); $message = ob_get_contents(); ob_end_clean(); wp_mail($user_email, $email_subject, $message); в  ob_start(); include('template/email-header.php'); printf(__('<p>A very special welcome to you, %1$s. Thank you for joining %2$s!</p>', 'cell-email'), $greetings, get_bloginfo('name')); printf(__('<p> Your password is <strong style="color:orange">%s</strong> <br> Please keep it secret and keep it safe! </p>', 'cell-email'), $plaintext_pass); printf(__('<p>We hope you enjoy your stay at %s. If you have any problems, questions, opinions, praise, comments, suggestions, please feel free to contact us at any time</p>', 'cell-email'), get_bloginfo('name')); include('template/email-footer.php'); $message = ob_get_contents(); ob_end_clean(); wp_mail($user_email, $email_subject, $message); 

А на template/email-header.php вы можете использовать

 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta property="og:title" content="<?php echo $email_subject ?>" /> <title><?php echo $email_subject ?></title> </head> <body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0" style="width: 100% !important; -webkit-text-size-adjust: none; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; background-color: #FAFAFA;" bgcolor="#FAFAFA"> <!-- the rest of the html here --> <?php // and php generated content if you prefer ?> 

Вы могли бы сделать что-то более похожее на слияние полей. Таким образом, вы можете оставить свой html и php разделенными с помощью шаблона электронной почты с заполнителями и выполнить замену строки на них, например:

HTML

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> (headertags) </head> <body> <h1>[POST.TITLE]</h1> <p>[POST.CONTENT]</p> </body> </html> 

PHP

 $html_email_template_file = 'some/path/mytemplate-example.html'; // assign contents of file to $content var $content = file_get_contents($html_email_template_file); $content = str_replace('[POST.TITLE]', $post->post_title, $content); $content = str_replace('[POST.CONTENT]', $post->post_excerpt, $content); // send your email here ...