受注リストから送信出来るメールを追加
スポンサーリンク
バックヤードの「受注リスト」から送信出来るメールを追加する方法です。
基本的にフックを使うカスタマイズですが、ステップが多く、複雑です。PHPやjQueryを記述する必要があるため、中級以上の方向けのカスタマイズだと思います。実を言うと完全に出来たというわけではありません。
今回は「フォローメールを追加する」という設定でやってみたいと思います。
もくじ
- 「メール設定」画面で新しいメールフォームの追加
- 「受注リスト」画面のメール・印刷フィールドに、メールの項目を増やす
- メールの内容をjQueryで展開
- メール送信後にチェックボックスに自動でチェックを入れる
- まとめ
1. 「メール設定」画面で新しいメールフォームを追加
まずは、Welcartの「メール設定」画面で、新しいメール項目用のフォームを表示させるようにしてみます。
1-1. 利用するフック
- フックの記述:usces_action_admin_mailform
- フックの場所:includes/admin_mail.php
ここでは、メール設定画面でのメールフォームを生成・出力しているusces_action_admin_mailformという命令にアクションフックをつけ、それが発動する際に新しいメールフォームを追加させるようにします。
admin_mail.phpを開いてみて頂ければわかりますが、殆どHTMLで書かれているので、そのうちの一つの入力フォームをコピーペーストして、新しいメールフォーム用に使えばOKです。
1-2. functions.phpにアクションフックを記述
以下のコードをfunctions.phpに追加します。
//1:「メール設定」画面でフォローメール用フォームを追加 function my_follow_mail(){ global $usces; $mail_datas = $usces->options['mail_data']; ?> <div class="postbox"> <h3 class="hndle"><span>フォローメール</span><a style="cursor:pointer;" onclick="toggleVisibility('ex_followmail_mail');"> (<?php _e('explanation', 'usces'); ?>) </a></h3> <div class="inside"> <table class="form_table"> <tr> <th width="150"><?php _e('Title', 'usces'); ?></th> <td><input name="title[followmail]" id="title[followmail]" type="text" class="mail_title" value="<?php echo esc_attr($mail_datas['title']['followmail']); ?>" /></td> <td> </td> </tr> <tr> <th><?php _e('header', 'usces'); ?></th> <td><textarea name="header[followmail]" id="header[followmail]" class="mail_header"><?php echo esc_html($mail_datas['header']['followmail']); ?></textarea></td> <td> </td> </tr> <tr> <th><?php _e('footer', 'usces'); ?></th> <td><textarea name="footer[followmail]" id="footer[followmail]" class="mail_footer"><?php echo esc_html($mail_datas['footer']['followmail']); ?></textarea></td> <td> </td> </tr> </table> <hr size="1" color="#CCCCCC" /> <div id="ex_followmail_mail" class="explanation"><?php _e('e-mail which will be sent on temporaly basis', 'usces'); ?></div> </div> </div><!--postbox--> <?php } add_action('usces_action_admin_mailform','my_follow_mail', 10, 1);
これで、「メール設定」画面にフォローメール用のメール設定フォームが表示されます。
ここに入力された内容は、他のメール内容と一緒にデータベースに保存されるようになります。
2. 「受注リスト」画面のメール・印刷フィールドに、メールの項目を増やす
次に、「受注リスト」画面のメール・印刷フィールドに、フォローメール用の項目を増やします。
2-1. 利用するフック
受注リストの画面で、メール項目などが追加出来るように、予めフックが用意されています。
- フックの場所:usces_filter_admin_ordernavi
- フックの記述:includes/order_edit_form.php
フックの記述の直前に、既存の項目のチェックボックスのHTMLが書かれているので、それを参考に新しく作りたいフォローメール用のチェックボックスのコードを書きます。
いくつか変数も使われているので、それらも同様に記述して、問題なく動くようにしておきます。
2-2. functions.phpにフィルターフックを記述
以下のコードをfunctions.phpに追加します。
//2. 「受注リスト」画面のメール・印刷フィールドに、メールの項目を増やす function my_filter_admin_ordernavi(){ global $wpdb; $tableName = $wpdb->prefix . "usces_order"; $order_id = $_REQUEST['order_id']; $query = $wpdb->prepare("SELECT * FROM $tableName WHERE ID = %d", $order_id); $data = $wpdb->get_row( $query, ARRAY_A ); $ordercheck = stripslashes_deep(unserialize($data['order_check'])); $html = '<td><input name="check[followmail]" type="checkbox" value="followmail"'; if(isset($ordercheck['followmail'])) { $html .= ' checked="checked"}'; } $html .= '/></td><td><a href="#" id="followmail">フォローメール</a></td>'; return $html; } add_filter('usces_filter_admin_ordernavi', 'my_filter_admin_ordernavi', 10, 1);
これで、新しく項目が表示されるようになりました。
3. メールの内容をjQueryで展開
新たに項目が出来たので、後はこれをクリックした時に1で作ったメールフォームの内容を呼び出すだけです。
が、実のところ、本文の読み込みに完全には成功していません。具体的には、
- 本文(ヘッダーとフッター)に改行があると、「メール・印刷フィールド」が開かなくなる
という残念な問題があります。どなたか詳しい方がいらしたら教えて下さいm(_ _)m
既存のメール項目呼び出し同様にajaxを使えば良さそうではありますが、うまい具合に追加項目用のflagなどがないため、詰まってしまいました。
3-1. 利用するフック
「メール設定」で入力しておいたメール内容を、「受注リスト」画面で呼び出すjQueryに、フックが設置されています。
- フックの記述:usces_filter_order_edit_page_js
- フックの場所:includes/order_edit_form.php
このフックは命令を書き換えるタイプではなく、新しい命令を追加出来るように設置してあるので、次のfunctions.phpに記載する場合は、実行させたいスクリプトを書くだけでいいです。
3-2. functions.phpにフィルターフックを記述
メール本文(ヘッダーとフッター)に改行がなければ、以下のようにして読み込みは出来ます。
//3: メールフォームをjQueryで展開 function my_filter_order_edit_page_js(){ global $usces; $mail_data = $usces->options['mail_data']; ?> $("#followmail").click(function() { $("#sendmailaddress").val($("input[name='customer\[mailaddress\]']").val()); $("#sendmailname").val($("input[name='customer\[name1\]']").val()+$("input[name='customer\[name2\]']").val()); $("#sendmailsubject").val('<?php echo esc_attr($mail_data['title']['followmail']); ?>'); $('#mailChecked').val('followmail'); $('#mailSendDialog').dialog('option', 'title', 'フォローメール'); $('#mailSendDialog').dialog('open'); $("#sendmailmessage").val( '<?php echo esc_attr($mail_data['header']['followmail']); echo esc_attr($mail_data['footer']['followmail']); ?>' ); }); <?php } add_filter('usces_filter_order_edit_page_js','my_filter_order_edit_page_js', 10, 1);
問題の箇所は13行目の$("#sendmailmessage")
のval
の部分です。ここで「メール設定」で入力しておいたヘッダーとフッターを呼び出していますが、改行があるとエラーが起き「メール・印刷フィールド」が開けなくなります。ajaxで呼び出すいい方法がないものか・・・?
4. メール送信後にチェックボックスに自動でチェックを入れる
別にチェックを手動で入れてもいいのですが、やはり出来るだけ楽をするためにカスタマイズを行っているので、チェックボックスには自動でチェックが入るようにしましょう。
4-1. 利用するフック
- フックの記述:usces_filter_order_check_mail_js
- フックの場所:includes/order_edit_form.php
4-2. functions.phpにフィルターフックを記述
以下のコードをfunctions.phpに記載します。
//4. 送信後に自動でチェックを入れる function my_filter_order_check_mail_js(){ ?> if(checked == 'followmail'){ $("input[name='check\[followmail\]']").attr({checked: true}); } <?php } add_filter('usces_filter_order_check_mail_js','my_filter_order_check_mail_js',10,1);
これで、送信完了後には自動でチェックが入るようになります。
5. まとめ
工数が多く若干難しいカスタマイズです。メール本文呼び出しがうまく出来てないですし・・・。
項目を増やすだけなら2と4だけでも、何とかなると言えば何とかなります。
プログラミングが得意な皆様、3のところ何かいい方法があればご教授下さいませ~。
昔の記事に失礼。 雑な解決法ですが、「3-2. functions.phpにフィルターフックを記述」のヘッダとフッタを呼び出すところで、改行を改行コードに変換してやればとりあえずいけますね。
$("#sendmailmessage").val( '' );
↓
$("#sendmailmessage").val( '' );
ここだけ対応すれば良かったので助かりました。ありがとうございます。
あ、消えた。esc_attr()が2つあるので、
echo esc_attr(。。。)
を
echo preg_match(”/¥r¥n/”、”¥¥n”、esc_attr(。。。))
で。