自動送信メールの本文変更

2014 年 11 月 26 日

ホーム フォーラム 使い方全般 自動送信メールの本文変更

このトピックには18件の返信が含まれ、3人の参加者がいます。2 年、 9 ヶ月前 JunichiK さんが最後の更新を行いました。

15件の投稿を表示中 - 1 - 15件目 (全19件中)
  • 投稿者
    投稿
  • #72876

    JunichiK
    参加者

    いつもお世話になります。

    サンキューメールと受注メールの本文を変更したいのですが、どこをカスタマイズすればよろしいでしょうか?
    具体的には、タイトル【ご注文内容】の変更、購入者情報項目の変更削除、注文内容明細から単価文言と数量削除、送料・代引手数料項目削除、配送先全般削除、といった感じです。

    よろしくお願いいたします。

    #72911

    nanbu
    参加者

    こんにちは。

    管理メールは ’usces_filter_order_confirm_mail_bodyall’、サンキューメールには’usces_filter_send_order_mail_bodyall’ というフィルターフックが用意されています。フックの使い方はこちらをご覧ください。

    Welcart のカスタマイズとフック

    #72915

    JunichiK
    参加者

    お世話になります。

    それらのフックはどのファイルにございますか?

    #72916

    JunichiK
    参加者

    上記分かりました。functions/function.phpでした。

    #72962

    JunichiK
    参加者

    フィルターフック usces_filter_send_order_mail_bodyall で wp_get_object_terms()を取得したいのですが、取得できません。
    タクソノミーが存在しないという WP_Error が返ってきます。
    他のテンプレートでは正常に取得できているのですが、なぜでしょう?
    functions.php のフィルターフックのコードは概ね下記のような感じです。

    add_filter( 'usces_filter_send_order_mail_bodyall', 'my_filter_send_order_mail_bodyall', 10, 2 );
    function my_filter_send_order_mail_bodyall( $msg_body, $data ) {
    	$user = wp_get_current_user();
    	$user_id = get_current_user_id();
    	$user_terms = wp_get_object_terms( $user_id, 'user-group' );
    	if( !empty( $user_terms ) ) {
    		if( !is_wp_error( $user_terms ) ) {
    			foreach( $user_terms as $user_term ) {
    			}
    		}
    	}
    	$msg_body = "\r\n\r\n\r\n【お支払内容】\r\n";
    	$msg_body .= usces_mail_line( 1, $data['order_email'] );//********************
    	$msg_body .= "メールアドレス:" .$user->get('user_email'). "\r\n";
    	$msg_body .= "お名前    :" .$user->get('display_name'). " 様\r\n";
    	$msg_body .= "ID       :" .$user_id. "\r\n";
    	$msg_body .= "所属     :" .$user_term->name. "\r\n";
    	return $msg_body;
    }

    ちなみに $msg_body 以下をコメントアウトして直接 return $user_term->name; としても取得できません。
    WP_Error が返ってきていることは分かっています。

    何卒ご教示のほどよろしくお願いいたします。

    #72976

    nanbu
    参加者

    こんにちは。

    $user = wp_get_current_user(); とありますが、WordPressのユーザーを取得していらっしゃるようですが、Welcartのユーザーはこれでは取得できません。何か意図があってのことでしょうか。

    ‘usces_filter_send_order_mail_bodyall’、これはサンキューメールでのフックです。クレジットカードでは、WPにログインしていても取得するのは無理かもしれません。WPのログイン状態にはならない可能性があります。

    #72977

    JunichiK
    参加者

    nanbu様、お世話になります。

    Welcartのユーザーは取得せずに(会員システムを使わずに)、WordPressのユーザーを使用しています。
    register_taxonomyの第二引数にuserを指定することで、user-group というタクソノミーでWPユーザーをグループ分けしており、それを使用する必要があるからです。

    サンキューメール等のWelcartの自動送信メールに、WPユーザー名やグループ(term)などを表示したいのですが、$user->get(‘user_email’) や $user->get(‘display_name’) は取得出来ておりますので、WPのログイン状態にはなっていると思います。
    ですが、なぜか $user_term->name は取得できないのです。

    • この返信は2 年、 11 ヶ月前に  JunichiK さんが編集しました。
    #73020

    nanbu
    参加者

    $user_id = get_current_user_id();
    が取得できているのでしたら
    `$user_terms = wp_get_object_terms( $user_id, ‘user-group’ );’
    も取得できるのではないでしょうか。
    特にコードが間違っているようには見えませんが・・・

    #73022

    JunichiK
    参加者

    私も取得出来るものだと思っていたのですが、$user_terms に WP_Error が返ってきているようで、
    return $user_terms->get_error_message();
    でエラーメッセージを確認しますと、「不正なタクソノミー分類です。」と返ってきております。

    #73335

    JunichiK
    参加者

    試行錯誤しておりますが、サンキューメールのカスタマイズが思うようにいきません。
    フックの使い方が不慣れのせいもあり、なかなかうまくいきません。ヒントをお願いいたします。
    希望しているのは、送料や配送先などの情報は不要で、下記の内容のみを取得したいのです。

    ご注文内容(メールアドレス、名前、注文日時)
    商品明細(商品コード、商品名、単価)
    合計金額
    支払い方法
    その他

    $msg_bodyには、’usces_filter_send_order_mail_bodyall’フック以外にも多数のフックが絡んでいるようで、それらをどのようにしてよいのか分からなくなっております。
    何卒ご教示のほどよろしくお願いいたします。

    #73337

    JunichiK
    参加者

    いつもお世話になります。
    希望するサンキューメール本文は下記の通りです。
    ここから——————–
    【ご注文内容】
    ******************************************************
    注文番号 : 00001234
    注文日時 : 2015-01-26 00:24:41
    商品 :
    ——————————————————————
    (商品名) (商品コード)
    単価 ¥10,000 × 1
    =============================================
    商品合計 : ¥10,000
    代引手数料 : ¥0
    ——————————————————————
    お支払い金額 : ¥10,000
    ——————————————————————
    (通貨 : 円)

    【お支払方法】
    ******************************************************
    代金引換

    【その他】
    ******************************************************
    ——————–ここまで

    上記の件につきまして、plugins/usc-e-shop/functionsのfunction.phpを下記のようにコメントアウトしますと、希望通りのサンキューメールになります(コメントアウト部分は///でマークしております)。

    function usces_send_ordermail($order_id) {
    	global $usces, $wpdb;
    	
    	$tableName = $wpdb->prefix . "usces_order";
    	$query = $wpdb->prepare("SELECT * FROM $tableName WHERE ID = %d", $order_id);
    	$data = $wpdb->get_row( $query, ARRAY_A );
    
    	$cart = $usces->cart->get_cart();
    	$entry = $usces->cart->get_entry();
    	$mail_data = $usces->options['mail_data'];
    	$payment = $usces->getPayments( $entry['order']['payment_name'] );
    	$res = false;
    
    	$msg_body = "\r\n\r\n\r\n" . __('** content of ordered items **','usces') . "\r\n";
    	$msg_body .= usces_mail_line( 1, $entry['customer']['mailaddress1'] );//********************
    	$msg_body .= apply_filters('usces_filter_send_order_mail_first', NULL, $data);
    ///	$msg_body .= uesces_get_mail_addressform( 'order_mail_customer', $entry, $order_id );
    	$msg_body .= __('Order number','usces') . "\t: " . usces_get_deco_order_id( $order_id ) . "\r\n";
    	$msg_body .= __( 'order date','usces' ) . "\t: " . $data['order_date'] . "\r\n";
    	
    	$meisai = __('Items','usces') . "\t\t: \r\n";
    	foreach ( $cart as $cart_row ) {
    		$post_id = $cart_row['post_id'];
    		$sku = urldecode($cart_row['sku']);
    		$quantity = $cart_row['quantity'];
    		$options = $cart_row['options'];
    		$itemCode = $usces->getItemCode($post_id);
    		$itemName = $usces->getItemName($post_id);
    		$cartItemName = $usces->getCartItemName($post_id, $sku);
    		$skuPrice = $cart_row['price'];
    //		$pictids = $usces->get_pictids($itemCode);
    		if (!empty($options)) {
    //			$optstr = implode(',', $options);
    		} else { 
    			$optstr =  '';
    			$options =  array();
    		}
    		
    		$meisai .= usces_mail_line( 2, $entry['customer']['mailaddress1'] );//--------------------
    		$meisai .= "$cartItemName \r\n";
    		if( is_array($options) && count($options) > 0 ){
    			$optstr = '';
    			foreach($options as $key => $value){
    				if( !empty($key) ) {
    					$key = urldecode($key);
    					if(is_array($value)) {
    						$c = '';
    						$optstr .= $key. ' : ';
    						foreach($value as $v) {
    							$optstr .= $c.urldecode($v);
    							$c = ', ';
    						}
    						$optstr .= "\r\n"; 
    					} else {
    						$optstr .= $key . ' : ' . urldecode($value) . "\r\n"; 
    					}
    				}
    			}
    			$meisai .= apply_filters( 'usces_filter_option_ordermail', $optstr, $options);
    		}
    		$meisai .= __('Unit price','usces') . " ".usces_crform( $skuPrice, true, false, 'return' ) . __(' * ','usces') . $cart_row['quantity'] . "\r\n";
    	}
    	$meisai .= usces_mail_line( 3, $entry['customer']['mailaddress1'] );//====================
    	$meisai .= __('total items','usces') . "\t: " . usces_crform( $entry['order']['total_items_price'], true, false, 'return' ) . "\r\n";
    
    	if ( $entry['order']['discount'] != 0 )
    		$meisai .= apply_filters('usces_confirm_discount_label', __('Campaign disnount', 'usces'), $order_id) . " : " . usces_crform( $entry['order']['discount'], true, false, 'return' ) . "\r\n";
    
    	if ( 0.00 < (float)$entry['order']['tax'] && 'products' == usces_get_tax_target() )
    		$meisai .= usces_tax_label($data, 'return') . "\t: " . usces_crform( $entry['order']['tax'], true, false, 'return' ) . "\r\n";
    
    ///	$meisai .= "\r\n" . __('Shipping','usces') . "\t\t: " . usces_crform( $entry['order']['shipping_charge'], true, false, 'return' ) . "\r\n";
    
    	if ( $payment['settlement'] == 'COD' )
    		$meisai .= apply_filters('usces_filter_cod_label', __('COD fee', 'usces')) . "\t: " . usces_crform( $entry['order']['cod_fee'], true, false, 'return' ) . "\r\n";
    
    	if ( 0.00 < (float)$entry['order']['tax'] && 'all' == usces_get_tax_target() )
    		$meisai .= usces_tax_label($data, 'return') . "\t: " . usces_crform( $entry['order']['tax'], true, false, 'return' ) . "\r\n";
    
    	if ( $entry['order']['usedpoint'] != 0 )
    		$meisai .= __('use of points','usces') . " : " . number_format($entry['order']['usedpoint']) . __('Points','usces') . "\r\n";
    
    	$meisai .= usces_mail_line( 2, $entry['customer']['mailaddress1'] );//--------------------
    	$meisai .= __('Payment amount','usces') . " : " . usces_crform( $entry['order']['total_full_price'], true, false, 'return' ) . "\r\n";
    	$meisai .= usces_mail_line( 2, $entry['customer']['mailaddress1'] );//--------------------
    	$meisai .= "(" . __('Currency', 'usces') . ' : ' . __(usces_crcode( 'return' ), 'usces') . ")\r\n\r\n";
    
    	$msg_body .= apply_filters('usces_filter_send_order_mail_meisai', $meisai, $data, $cart, $entry);
    
    ///	$msg_shipping = __('** A shipping address **','usces') . "\r\n";
    ///	$msg_shipping .= usces_mail_line( 1, $entry['customer']['mailaddress1'] );//********************
    	
    ///	$msg_shipping .= uesces_get_mail_addressform( 'order_mail', $entry, $order_id );
    
    ///	$deli_meth = (int)$entry['order']['delivery_method'];
    ///	if( 0 <= $deli_meth ){
    ///		$deli_index = $usces->get_delivery_method_index($deli_meth);
    ///		if( 0 <= $deli_index ) $msg_shipping .= __('Delivery Method','usces') . "\t: " . $usces->options['delivery_method'][$deli_index]['name'] . "\r\n";
    ///	}
    ///	$msg_shipping .= __('Delivery date','usces') . " : " . $entry['order']['delivery_date'] . "\r\n";
    ///	$msg_shipping .= __('Delivery Time','usces') . " : " . $entry['order']['delivery_time'] . "\r\n";
    ///	$msg_shipping .= "\r\n";
    ///	$msg_body .= apply_filters('usces_filter_send_order_mail_shipping', $msg_shipping, $data, $entry );
    
    	$msg_payment = __('** Payment method **','usces') . "\r\n";
    	$msg_payment .= usces_mail_line( 1, $entry['customer']['mailaddress1'] );//********************
    	$msg_payment .= $payment['name'] . usces_payment_detail($entry) . "\r\n\r\n";
    	if ( $payment['settlement'] == 'transferAdvance' || $payment['settlement'] == 'transferDeferred' ) {
    		$transferee = __('Transfer','usces') . " : \r\n";
    		$transferee .= $usces->options['transferee'] . "\r\n";
    		$msg_payment .= apply_filters('usces_filter_mail_transferee', $transferee, $payment);
    		$msg_payment .= "\r\n".usces_mail_line( 2, $entry['customer']['mailaddress1'] )."\r\n";//--------------------
    	} elseif($payment['settlement'] == 'acting_jpayment_conv') {
    		$args = maybe_unserialize($usces->get_order_meta_value($payment['settlement'], $order_id));
    		$msg_payment .= __('決済番号', 'usces').' : '.$args['gid']."\r\n";
    		$msg_payment .= __('決済金額', 'usces').' : '.number_format($args['ta']).__('dollars','usces')."\r\n";
    		$msg_payment .= __('お支払先', 'usces').' : '.usces_get_conv_name($args['cv'])."\r\n";
    		$msg_payment .= __('コンビニ受付番号','usces').' : '.$args['no']."\r\n";
    		if($args['cv'] != '030') {//ファミリーマート以外
    			$msg_payment .= __('コンビニ受付番号情報URL', 'usces').' : '.$args['cu']."\r\n";
    		}
    		$msg_payment .= "\r\n".usces_mail_line( 2, $entry['customer']['mailaddress1'] )."\r\n";//--------------------
    	} elseif($payment['settlement'] == 'acting_jpayment_bank') {
    		$args = maybe_unserialize($usces->get_order_meta_value($payment['settlement'], $order_id));
    		$msg_payment .= __('決済番号', 'usces').' : '.$args['gid']."\r\n";
    		$msg_payment .= __('決済金額', 'usces').' : '.number_format($args['ta']).__('dollars','usces')."\r\n";
    		$bank = explode('.', $args['bank']);
    		$msg_payment .= __('銀行コード','usces').' : '.$bank[0]."\r\n";
    		$msg_payment .= __('銀行名','usces').' : '.$bank[1]."\r\n";
    		$msg_payment .= __('支店コード','usces').' : '.$bank[2]."\r\n";
    		$msg_payment .= __('支店名','usces').' : '.$bank[3]."\r\n";
    		$msg_payment .= __('口座種別','usces').' : '.$bank[4]."\r\n";
    		$msg_payment .= __('口座番号','usces').' : '.$bank[5]."\r\n";
    		$msg_payment .= __('口座名義','usces').' : '.$bank[6]."\r\n";
    		$msg_payment .= __('支払期限','usces').' : '.substr($args['exp'], 0, 4).'年'.substr($args['exp'], 4, 2).'月'.substr($args['exp'], 6, 2)."日\r\n";
    		$msg_payment .= "\r\n".usces_mail_line( 2, $entry['customer']['mailaddress1'] )."\r\n";//--------------------
    	}
    	
    	$msg_body .= apply_filters('usces_filter_send_order_mail_payment', $msg_payment, $order_id, $payment, $cart, $entry, $data);
    
    	$msg_body .= usces_mail_custom_field_info( 'order', '', $order_id );
    
    	$msg_body .= "\r\n";
    	$msg_body .= __('** Others / a demand **','usces') . "\r\n";
    	$msg_body .= usces_mail_line( 1, $entry['customer']['mailaddress1'] );//********************
    	$msg_body .= $entry['order']['note'] . "\r\n\r\n";

    しかし、これを、テーマの functions.php にて ‘usces_filter_send_order_mail_bodyall’ フックを使って行うと、注文番号と注文日時が取得出来なくて困っております。
    関数の引数に$dataを入れたり、
    $msg_body .= __('Order number','usces') . "\t: " . usces_get_deco_order_id( $order_id ) . "\r\n";
    の $order_id を $data に変更してみたりしましたが、思うようにいきませんでした。
    何かヒントだけでも良いので、ご教示願います。
    よろしくお願いいたします。

    #73351

    nanbu
    参加者

    配送方法等を取りたいという事でしたらフックは’usces_filter_send_order_mail_shipping’となります。
    ただ、金額欄の送料を取るのは難しいです。

    #73376

    JunichiK
    参加者

    nanbu様、ありがとうございます。

    仰せの通り、’usces_filter_send_order_mail_shipping’で配送方法を取り除くことは出来ました。

    金額欄の送料を取るのは難しいということですが、
    $msg_body .= uesces_get_mail_addressform( 'order_mail_customer', $entry, $order_id );
    で取得している住所や電話番号・FAX番号を取り除くことも難しいでしょうか?
    部分的に取るのが難しいようでしたら、メールアドレスや名前も含めて取り除いてもかまいません。
    ただ、注文番号と注文日時は活かしたいのですが、そのようなことは難しいでしょうか?

    何卒よろしくお願いいたします。

    #73388

    nglife
    参加者

    横から失礼します。
    希望されているサンキューメールですが、テーマfunctions.phpに下記追加してみてください。
    多分いけるかと思います。

    add_filter("usces_filter_apply_mail_addressform", "my_filter_apply_mail_addressform", 10, 4);
    function my_filter_apply_mail_addressform($formtag, $type, $data, $order_id){
    	if($type === "order_mail_customer"){
    		$formtag = "";
    	}
    	return $formtag;
    }
    add_filter("usces_filter_send_order_mail_meisai", "my_filter_send_order_mail_meisai", 10, 4);
    function my_filter_send_order_mail_meisai($meisai, $data, $cart, $entry){
    	$ptn = "/\r\n". __('Shipping','usces') .".+?\r\n/u";
    	if(preg_match($ptn, $meisai)){
    		$meisai = preg_replace($ptn, "", $meisai);
    	}
    	return $meisai;
    }
    add_filter("usces_filter_send_order_mail_shipping", "my_filter_send_order_mail_shipping", 10, 3);
    function my_filter_send_order_mail_shipping($msg_shipping, $data, $entry){
    	$msg_shipping = "";
    	return $msg_shipping;
    }

    ※諸々細かい説明は割愛します。すみません。
    ※作業中のコード(フィルター)は全て消して上のコードのみで試してみてください。

    #73398

    JunichiK
    参加者

    nglife様、ありがとうございます。
    おかげ様で、概ね、うまくいきました。
    ただ、$msg_bodyの内容を変更したい箇所が数ヶ所ございまして、それらをどうすべきか悩んでおります。下記箇所等になります。
    $msg_body = "\r\n\r\n\r\n" . __('** content of ordered items **','usces') . "\r\n";
    上記は【ご注文内容】と表示されるところですが、これを【お支払内容】に変更したいのです。
    また、注文番号→お支払い番号、注文日時→お支払い日時、商品→ご請求内容、単価→金額、商品合計→合計金額・・・としたいのですが、可能でしょうか?

    何卒よろしくお願いいたします。

15件の投稿を表示中 - 1 - 15件目 (全19件中)

このトピックに返信するにはログインが必要です。