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

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

#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の話ではなくなってしまい大変恐縮ですがどうぞご参考に。