Welcartのメール設定では、サンキューメールのヘッダ、フッタのみ編集可能で、本文中の文字は変更できません。本文中の【その他】などの文字を変える方法です。
目次
メッセージカードの文言を記入してもらう方法を考えた
生まれ年ワインショップのウリの一つに、『プレゼントを贈る側からのメッセージを自由文でメッセージカードにできる』というのがあります。今回、生まれ年ワインショップをWelcartでカスタマイズしていると、このメッセージカードの部分で悩みました。
カスタムオーダーフィールドにテキストエリアが入れられない
Welcartでは、『カートページ設定』から『カスタム・オーダー・フィールド』で特記事項を選択式、記入式でどんどん追加出来る便利な機能があります。しかし、残念なことに「シングルセレクト」「テキスト」「ラジオボタン」「チェックボックス」の4つからしか選択できません。 ←2019年現在、テキストエリアが選択可能です!
不思議な事に『基本設定』内の、『共通オプション』項目では上記の4つに加えて「テキストエリア」が選択可能なのに。
なので、ご注文時にお客様がメッセージカードに少し長めのメッセージを書こうと思った場合、「テキストエリア」であればストレスなく記入することが可能なのですが、「テキスト」の場合、入力フォームが小さいため、打ち込んでいると、最初の文字がどんどん見えなくなっていきますし、改行ができません。
これは、メッセージカードの文言を記入するには不便すぎます・・・(>_<)
備考欄でメッセージカードのメッセージを記入してもらう
どうにか、カスタムオーダーフィールドにテキストエリアを入れられないかと調べ、最も参考になりそうなのがフォーラム中の『[解決済み] カスタム・カスタマーフィールドのカスタマイズ』でしたが、投稿日が2011年でWelcart Basicの話ではないことと、私には難しい方法のようなので、断念しました。
そこで、試みた方法がカスタムオーダーフィールド中に新たな備考欄を「テキスト」で設置し、元の備考欄(【その他】)をメッセージ欄に変えるという方法です。
まずは、カートでの記入欄の見出しを変えなければなりません。カート内を動かしているphpファイルは、「welcart Basic」>「wc_templates」>「cart」フォルダ内にあります。このうち、お届け先やカスタムオーダーフィールに関するものは「wc_delivery_page.php」ファイルです。このファイルを、子テーマにコピーします。備考欄は、96行目(あたり)の次のように記載されています。
<table class="customer_form" id="notes_table">
<tr>
<?php $entry_order_note = ( empty($usces_entries['order']['note']) ) ? apply_filters( 'usces_filter_default_order_note', NULL ) : $usces_entries['order']['note']; ?>
<th scope="row"><?php _e('Notes', 'usces'); ?></th>
<td colspan="2"><textarea name="offer[note]" id="note" class="notes"><?php echo esc_html($entry_order_note); ?></textarea></td>
</tr>
</table>
これを次のように変更しました。
<!--メッセージ-->
<table class="customer_form" id="notes_table">
<tr>
<?php $entry_order_note = ( empty($usces_entries['order']['note']) ) ? apply_filters( 'usces_filter_default_order_note', NULL ) : $usces_entries['order']['note']; ?>
<th scope="row"><?php _e('メッセージ', 'usces'); ?><br /><span style="font-size:70%">メッセージカードにできます(字数制限なし)</span></th>
<td colspan="2"><textarea name="offer[note]" id="note" class="notes"><?php echo esc_html($entry_order_note); ?></textarea></td>
</tr>
</table>
<!--メッセージ(終了)-->
すると、お客様が記入するカート内のオーダーページはこのようになり、完成です!!
サンキューメール本文中の【その他】を別の文字にしたい
サンキューメールで困った
これで完成した!と思っていたのですが、注文時は良くてもお客様の元に自動返信メール(サンキューメール)が届く際に、【その他】の項目にメッセージが記載されてしまうことに気付きました。
これでは、お客様は自分が間違えたのかもしれないと不安になることと思います。そこで、この【その他】を【メッセージ】に変えたいです。
これは、カートの文字を変えるより、調べるのに時間がかかりました。最初に見つけたのは、やはりフォーラム中の質問で、『自動送信メールの本文変更』というものです。2ページにわたる質問のやり取りなのですが、ちょっと難しいのと、それを応用して【その他】を【メッセージ】にしようとしても上手く動きませんでした。
続いて、行きついたサイト(ページ)は、「Welcartのメールの送信者名を変更する」(WordPressカスタマイズ、サイト作成メモさん)です。
ここでは、メール本文中のサイトタイトルの変更方法を書いて下さっているのですが、これを応用するも、どうも上手くいかず・・・ただ、先ほどのフォーラムとこのサイトのstr_replaceという部分を見て、これがreplace関数というものだと、なんとなく分かりました。そこで、その言葉で調べると「[WordPress] コンテンツ中のテキストを任意のものに置換する」(かちびと.netさん)に辿り着きました。ここの次のコードが大変参考になりました。
<?php function change_any_texts($text){ $replace = array( //'変更前' => '変更後', '編集' => '<a href="#">編集</a>', '削除' => '<strong>削除</strong>' ); $text = str_replace(array_keys($replace), $replace, $text); return $text; } add_filter('the_content', 'change_any_texts'); ?>
具体的なカスタマイズ方法
これらを組み合わせて、カスタマイズしてみます。子テーマのfunctions.phpに次のように記載してみます。
/* 自動返信のサンキューメールの【その他】を【メッセージ】に*/
add_filter("usces_filter_send_order_mail_others", "my_filter_send_order_mail_others", 10, 2);
function my_filter_send_order_mail_others($msg_others) {
$replace = array(
'その他' => 'メッセージ'
);
$msg_others = str_replace(array_keys($replace), $replace, $msg_others);
return $msg_others;
}
/* 自動返信のサンキューメールの【その他】を【メッセージ】に(終了)*/
すると・・・
成功ですね♪
この方法で、【その他】を【備考】とか【ご要望】とか色々変更可能です^^
お願い
検索でここにたどり着いた方は、自営業者さんでWelcartを導入しようと思っている方だと思います。役に立った方は、ビジネスでの贈り物に当店「生まれ年ワインショップ」もしくは、日本初のプレゼント専門ワインショップ「プレゼントワインショップ」をご利用いただけると嬉しいですm(__)m