我正在使用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模板”中,但当我尝试此操作时,不会发送任何电子邮件。我是否包含了错误的模板?提前感谢您的回答。
最合适的回答,由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);