web-dev-qa-db-ja.com

WPメールにHTMLテンプレートファイルを含める

HTMLメールを送信するのにwpメールを使用しています。しかし、電子メールにはかなり多くのhtmlコードがあるので、私のwpメール機能にすべてのコードを含めるのではなく、コードを別のテンプレートに入れて、このテンプレートをその機能に含めることは可能ですか?これは私が持っているものです

<?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_email_template'に入れたいのですが、これを試すと電子メールが送信されません。テンプレートを正しく含めていませんか。ご回答ありがとうございます。

2
Xav

あなたの質問に対する私のコメントによれば、問題は、直接またはget_template_partを使用しているincludeingファイルが$bodyに渡す文字列をあなたに与えそうもないということであり、そしてそれはコードのエラーを引き起こすか、あるいは少なくとも予期しない動作.

ファイルをメモリに読み込むのを避け、あなたの$bodyの内容を返す関数を作成するだけです。

function get_email_body_wpse_96357() {
    $body = '<p>Hi</p>';
    return $body;
}

その後、必要に応じて$body = get_email_body_wpse_96357();を使用してください。この方法の利点は、あなたがそうすることに決めた場合、あなたが関数にパラメータを簡単に渡すことができるということです。インクルードファイルで変数を使用することもできますが、それは面倒です。

その関数を常にロードしたくない場合は、それを単独でファイルに入れて、その関数が必要なときだけそのファイルをインクルードしてください。

5
s_ha_dum

関数get_template_part()はHTMLを返さずにエコーします(ファイルを読み込むlocate_template()を使用します - echo)。

ob_start() を使用して出力バッファリングをオンにしてバッファを変数に入れるか、または file_get_contents() を使用することができます。

あなたのケースでは、私はこれが最善の解決策だと思います:

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

これは、出力バッファリングを使用するためのサンプルコードです。 "include line"の上で定義されているテンプレート内のすべての変数にアクセスできます。

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);
0
Mayur Chauhan