在wp_mail中包括HTML模板文件

时间:2013-04-18 作者:Xav

我正在使用wp_mail() 发送HTML电子邮件。但是在电子邮件中有很多HTML代码,所以与其将所有代码都包含在我的wp_mail() 函数,是否可以将代码放在单独的模板中,并将此模板包含在函数中?以下是我所拥有的:

<?php if ( isset( $_POST[\'submitted\'] )) {
   add_filter(\'wp_mail_content_type\',create_function(\'\', \'return "text/html"; \'));
   $emailTo = \'[email protected]\' ;
   $subject = \'This is the subject\';
   $body = get_template_part( \'includes/my_email_template\' );
   $headers = \'From: My Name\' . "\\r\\n";
   wp_mail($emailTo, $subject, $body, $headers);
}?>
我希望能够将所有HTML代码放入“my\\u email\\u模板”中,但当我尝试此操作时,不会发送任何电子邮件。我是否包含了错误的模板?提前感谢您的回答。

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

根据我对你问题的评论,我认为问题在于include直接或使用get_template_part 不太可能给你一个字符串$body 这将导致代码中出现错误,或者至少是未经检查的行为。

我会避免将文件读入内存,只创建一个函数来返回$body 所容纳之物

function get_email_body_wpse_96357() {
    $body = \'<p>Hi</p>\';
    return $body;
}
然后使用$body = get_email_body_wpse_96357(); 根据需要。这种方法的一个优点是,如果您决定这样做,您可以轻松地将参数传递给函数。您也可以在包含的文件中使用变量,但它可能很混乱。

如果您不想一直加载该函数,请将其自身放入文件中,并仅在需要该函数时才包含该文件。

SO网友:Mayur Chauhan

下面是使用输出缓冲的示例代码。您将能够访问模板内的所有变量,这些变量在“包含行”中定义。

WordPress:在电子邮件中包含模板

ob_start();
include(get_stylesheet_directory() . \'/assets/email-templates/booking-details-template.php\');
$email_content = ob_get_contents();
ob_end_clean();
$headers = array(\'Content-Type: text/html; charset=UTF-8\');
wp_mail($to_email, "Booking details", $email_content, $headers);

SO网友:ItayXD

功能get_template_part() 不返回HTML,但回显它(它使用locate_template() 加载文件-echo)。

您可以使用ob_start() 并将缓冲区放入变量中,或者可以使用file_get_contents().

就你的情况而言,我认为最好的解决方案是:

$body = file_get_contents(TEMPLATEPATH . \'includes/my_email_template.php\');

结束

相关推荐

Send email only upon draft

我正在尝试仅在将帖子保存为草稿时发送电子邮件,这似乎与当前代码不兼容: add_action( \'save_post\', \'er_send_email_on_post_draft_save\' ); function er_send_email_on_post_draft_save( $post_id ) { //verify post is not a revision if ( $post_id->post_status