※こちらはWelcart 2.6以前の記事です。
2022年8月3日追記
Welcartはバージョン2.7にアップデートされました。
詳しくは公式ページへ=>Welcart 2.7 の変更点とカスタマイズへの影響について
下記の記事は旧バージョンのものです。ご了承ください。
WordPressのお買い物プラグインWelcartでは、購入完了するとお客さんにサンキューメールが届きますが、商品画像がありません。そのサンキューメールに商品画像を表示する方法です。2工程あります。
①サンキューメールの商品名の上に画像を表示
まずは、メールの文章を作成しているところ。
WordPressトップ → 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()でリセットしてるっぽいところがあるので大丈夫かなと思います。