受注リストから送信出来るメールを追加

スポンサーリンク

バックヤードの「受注リスト」から送信出来るメールを追加する方法です。

Welcartのメール項目を追加

基本的にフックを使うカスタマイズですが、ステップが多く、複雑です。PHPやjQueryを記述する必要があるため、中級以上の方向けのカスタマイズだと思います。実を言うと完全に出来たというわけではありません。

今回は「フォローメールを追加する」という設定でやってみたいと思います。

もくじ

  1. 「メール設定」画面で新しいメールフォームの追加
  2. 「受注リスト」画面のメール・印刷フィールドに、メールの項目を増やす
  3. メールの内容をjQueryで展開
  4. メール送信後にチェックボックスに自動でチェックを入れる
  5. まとめ

1. 「メール設定」画面で新しいメールフォームを追加

まずは、Welcartの「メール設定」画面で、新しいメール項目用のフォームを表示させるようにしてみます。

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>&nbsp;</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>&nbsp;</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>&nbsp;</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);

これで、「メール設定」画面にフォローメール用のメール設定フォームが表示されます。

Welcartの新しいメール設定画面

ここに入力された内容は、他のメール内容と一緒にデータベースに保存されるようになります。

 

2. 「受注リスト」画面のメール・印刷フィールドに、メールの項目を増やす

次に、「受注リスト」画面のメール・印刷フィールドに、フォローメール用の項目を増やします。

Welcartのメール項目を追加

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);

これで、新しく項目が表示されるようになりました。

Welcartのメール項目を追加

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);

これで、送信完了後には自動でチェックが入るようになります。

Welcartの新しいメール項目に自動でチェックを入れる

5. まとめ

工数が多く若干難しいカスタマイズです。メール本文呼び出しがうまく出来てないですし・・・。

項目を増やすだけなら2と4だけでも、何とかなると言えば何とかなります。

プログラミングが得意な皆様、3のところ何かいい方法があればご教授下さいませ~。

2 Responses to “受注リストから送信出来るメールを追加”

  1. さち より:

    昔の記事に失礼。 雑な解決法ですが、「3-2. functions.phpにフィルターフックを記述」のヘッダとフッタを呼び出すところで、改行を改行コードに変換してやればとりあえずいけますね。

    $("#sendmailmessage").val( '' );


    $("#sendmailmessage").val( '' );

    ここだけ対応すれば良かったので助かりました。ありがとうございます。

  2. さち より:

    あ、消えた。esc_attr()が2つあるので、

    echo esc_attr(。。。)

    echo preg_match(”/¥r¥n/”、”¥¥n”、esc_attr(。。。))

    で。

Copyright© 2017 Welcart カスタマイズ ブログ All Rights Reserved.