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

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

  • このトピックには18件の返信、3人の参加者があり、最後にJunichiKにより9年、 9ヶ月前に更新されました。
4件の投稿を表示中 - 16 - 19件目 (全19件中)
  • 投稿者
    投稿
  • #73407
    nglife
    参加者

    >上記は【ご注文内容】と表示されるところですが、これを【お支払内容】に変更したいのです。
    >また、注文番号→お支払い番号、注文日時→お支払い日時、商品→ご請求内容、単価→金額、商品合計→合計金額・・・としたいのですが、可能でしょうか?

    可能は可能です。本文に対して検索を掛けてヒットした場合に希望文言に置換する流れです。
    出来ればフィルターを細かく区切った方が(置換の)誤作動を抑えられると思いますが、取り敢えず1つのフィルターで対処した場合です。
    キリがなくなってきますので、以下で最後と致します(すみません)。

    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){
    	$ptns = array(
    		array(
    			"ptn" => "\r\n" . __('** content of ordered items **','usces') . "\r\n",
    			"rep" => "\r\n" . __('【お支払内容】','usces') . "\r\n"
    		),
    		array(
    			"ptn" => __('Order number','usces') . "\t:",
    			"rep" => __('お支払い番号','usces') . "\t:"
    		),
    		array(
    			"ptn" => __( 'order date','usces' ) . "\t: ",
    			"rep" => __('お支払い日時','usces') . "\t: "
    		),
    		array(
    			"ptn" => __('Items','usces') . "\t\t: \r\n",
    			"rep" => __('ご請求内容','usces') . "\t\t: \r\n"
    		),
    		array(
    			"ptn" => __('Unit price','usces') . " ",
    			"rep" => __('金額','usces') . " "
    		),
    		array(
    			"ptn" => __('total items','usces') . "\t: ", 
    			"rep" => __('合計金額','usces') . "\t: "
    		)
    	);
    	foreach($ptns as $ptn_arr){
    		if($ptn_arr["ptn"] != ""){
    			$ptn = "/" . $ptn_arr["ptn"] . "/u";
    			$rep = $ptn_arr["rep"];
    			if(preg_match($ptn, $msg_body)){
    				$msg_body = preg_replace($ptn, $rep, $msg_body);
    			}
    		}
    	}
    	return $msg_body;
    }

    若干パワープレイです。
    意図せぬ動作になっても責任は負えませんがコードをご参考に後はご自身でカスタマイズしてみて下さい。

    #73435
    JunichiK
    参加者

    nglife様、本当にありがとうございます。
    何度も無理申しましてすみません。

    この前にご回答いただいたコードから、preg_replace()関数を使用するのか…と思っていたところでしたので、スッキリいたしました。
    もし、可能なら、もう1つだけお付き合いいただけないでしょうか。
    ご教示いただいたコードを参考に試行錯誤しておりますが、うまくいかない箇所が一つありまして…。無理なら諦めます。
    単価の後の数量( × 1)を消したいのです。
    function.phpにある元のコードは下記ですが、消したい要素に’$cart_row[‘quantity’] . “\r\n”‘というふうに変数が絡んでいるので、うまくいきません。
    $meisai .= __('Unit price','usces') . " ".usces_crform( $skuPrice, true, false, 'return' ) . __(' * ','usces') . $cart_row['quantity'] . "\r\n";
    preg_replace()で $cart_row[‘quantity’] を置換する方法を教えていただければ助かります。

    すみません、よろしくお願い致します。

    • この返信は9年、 9ヶ月前にJunichiKが編集しました。
    #73453
    nglife
    参加者

    既に解決されていたらすみません。最近メール本文変更絡みの投稿もちらほらあるようなので参考として最後の最後で。

    仰る動作も正規表現とコードの処理構造を整えることで実現出来るかと思います。
    前回のコードを以下のコードに丸々変更して下さい。これもスマートではありませんが。。。

    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){
    	$ptns = array(
    		array(
    			"ptn" => "^" . __('** content of ordered items **','usces') . "$",
    			"rep" => __('【お支払内容】','usces')
    		),
    		array(
    			"ptn" => "^" . __('Order number','usces') . "\t:",
    			"rep" => __('お支払い番号','usces') . "\t:"
    		),
    		array(
    			"ptn" => "^" . __( 'order date','usces' ) . "\t: ",
    			"rep" => __('お支払い日時','usces') . "\t: "
    		),
    		array(
    			"ptn" => "^" . __('Items','usces') . "\t\t: ",
    			"rep" => __('ご請求内容','usces') . "\t\t: "
    		),
    		array(
    			"ptn" => "^" . __('Unit price','usces') . " ",
    			"rep" => __('金額','usces') . " ",
    			"rmv" => __(' * ','usces') . "[0-9]*$"
    		),
    		array(
    			"ptn" => "^" . __('total items','usces') . "\t: ", 
    			"rep" => __('合計金額','usces') . "\t: "
    		)
    	);
    	$msg_body = explode("\r\n", $msg_body);
    	foreach($msg_body as $k => $msg){
    		foreach($ptns as $ptn_arr){
    			if($ptn_arr["ptn"] != ""){
    				$ptn = "/" . $ptn_arr["ptn"] . "/u";
    				$rep = $ptn_arr["rep"];
    				if(preg_match($ptn, $msg)){
    					if(isset($ptn_arr["rmv"]) && $ptn_arr["rmv"] != ""){
    						$rmv_ptn = "/" . $ptn_arr["rmv"] . "/u";
    						if(preg_match($rmv_ptn, $msg)){
    							$msg = preg_replace($rmv_ptn, "", $msg);
    						}
    					}
    					$msg_body[$k] = preg_replace($ptn, $rep, $msg);
    				}
    			}
    		}
    	}
    	$msg_body = implode("\r\n", $msg_body);
    	return $msg_body;
    }

    「× 数量」を含む一文は単価→金額の変更処理と共に複数回出現する可能性があるため、メッセージ本文全てを「改行(¥r¥n)を区切り文字」として一時配列に格納しforeachで処理するような形を取っています。
    「× 数量」のみで検索を掛けると誤置換もありそうなので、単価→金額の変更処理のついでに同一文に含まれる「× 数量」を消去しています。

    正規表現に関しては馴染みがないと非常に理解しづらい部分では有りますが実現できることが格段に増えますので頑張ってみて下さい。下記のようなチェックサイトもあるので上手く活用してみて下さい。
    「PHP正規表現チェッカー」
    http://www.rider-n.sakura.ne.jp/regexp/regexp.php

    最早Welcartの話ではなくなってしまい大変恐縮ですがどうぞご参考に。

    #73502
    JunichiK
    参加者

    nglife様、最後の最後にありがとうございます!
    正規表現は難解で、私が理解するには時間がかかりそうですが、とりあえずコピーさせていただいて、うまくいきました。
    このトピックの中盤あたりから紆余曲折あり、解決していないこともありますが、とりあえず及第点には届いたと思います。
    ありがとうございました。

4件の投稿を表示中 - 16 - 19件目 (全19件中)
  • このトピックに返信するにはログインが必要です。