Bloosh Company

2021年7月26日

Development>WordPress

Welcartのサンキューメールに商品画像を添付する方法!

, , , ,

WordPressのお買い物プラグインWelcartでは、購入完了するとお客さんにサンキューメールが届きますが、商品画像がありません。そのサンキューメールに商品画像を表示する方法です。2工程あります。
 

①サンキューメールの商品名の上に画像を表示

まずは、メールの文章を作成しているところ。
ルートディレクトリ → wp-content → plugins → usc-e-shop → functions → function.phpにその関数usces_send_ordermail()があります。
usces_filter_advance_ordermailアクションフックを利用します。テンプレートフォルダfunctions.phpに下記コードを追加します。
※ファイル名が激似なので注意。アップロード場所を間違えないようにしてください。

/*サンキューメール本文に商品画像を追加*/
add_filter( 'usces_filter_advance_ordermail',  'my_filter_advance_ordermail', 10, 3 );
function my_filter_advance_ordermail( $msg_advance, $cart_row, $data ) {
	$post_id = $cart_row['post_id'];
	if($img = usces_the_itemImageURL( 0, 'return', get_post($post_id))){
		$pathinfo = pathinfo($img);
		$cart_item_name = "<img src='".$pathinfo["basename"]."'><br>" . $cart_item_name;
	}
	return $cart_item_name;
}

ポイントは単にpathinfo()basename()で画像のファイル名だけを指定している点です。
 

②画像をメールに添付して、テキストメールをHTML方式に変更する

次に、①で作成したメール文章を送信する関数です。①と同じfunction.php(Welcartプラグインフォルダ内)の中に、その関数usces_send_mail()があります。WordPressのwp_mail()を使用してメールを送信しています。
ここで、メールに画像を添付します。また、現在のテキスト形式のままでは画像を文中に表示できないので、HTML形式に変更します。
usces_send_ordermail_para_to_customerアクションフックを利用します。テンプレートフォルダfunctions.phpに下記コードを追加します。
※先ほどと同じです。

add_filter( 'usces_send_ordermail_para_to_customer',  'my_send_ordermail_para_to_customer', 10, 3 );
function my_send_ordermail_para_to_customer( $confirm_para, $entry, $data ) {
	global $usces;
	$cart = $usces->cart->get_cart();
	$confirm_para['attachments'] = "";
	foreach ( $cart as $cart_key => $cart_row ) {
		$post_id = $cart_row['post_id'];
		if($img = usces_the_itemImageURL( 0, 'return', get_post($post_id))){
			$img = str_replace(site_url() . "/", ABSPATH, $img);
			$confirm_para['attachments'] .= "\n" . $img;
		}
	}

	$confirm_para['attachments'] = trim($confirm_para['attachments']);
	$confirm_para['message'] = nl2br($confirm_para['message']);
	$confirm_para['headers'] = array( 'Content-Type: text/html; charset=UTF-8' );
	return $confirm_para;
}

attachmentsというパラメータに、画像パスを渡しています。改行で区切ると複数添付できます。今度は、サーバー内の絶対パスを渡します。httpから始まるURLではいけません。ABSPATHで変換します。
 
また、このままHTML形式に変換すると、改行が反映されないので、文章をnl2br()で変換します。
最後にヘッダーに「HTML形式ですよ~」と教えてあげて完了です。
 
本当は、形式を変えたらリセットしないと、WordPressの他のシステムに影響があるんですが、usces_send_mail()でリセットしてるっぽいところがあるので大丈夫かなと思います。

Welcartのサンキューメールに商品画像を添付する方法! #WordPress #welcart #wp_mail #プラグイン #メール #商品画像

<<次の記事

Welcartにメッセージカードオプションを追加する!

前の記事>>

Welcartの自作テンプレートが反映されない問題