Welcartにメールマガジン機能を

改造人ツクルダーjQuery, PHP, web制作, WordPress, 備忘録

Welcartは慣れ親しんできたWordPressでショッピングカートが構築できるのでありがたいです。WordPressのプラグインだけあってカスタマイズの柔軟性も魅力なのですが、残念なことにWelcart単体ではメールマガジンの配信ができません。Subscribe2などのプラグインと組み合わせることで実現するしかなさそう。


しかし、諸般の事情でAcmailer3でメールマガジンを配信することになってしまいました。

調べてみると http://techblog.55w.jp/?p=185 のように、WelcartからAcmailerへメールアドレスの登録ができるらしいことを発見。


ならばやるしかないか。


必要な条件と機能は以下の通り。


・WelcartのPHPプログラムはなるべくいじらない(アップグレード対策)

・商品購入時ではなく会員登録時にメルマガ配信の登録を行う

・会員情報ページからメルマガ登録・解除・登録アドレス変更を行う

・Welcart会員情報削除時にAcmailerからも削除



新規会員登録フォーム用としてテーマディレクトリの「functions.php」に以下を追記。

functions.php    
function acmailer_reg(){
  global $usces;
  $member_data = $usces->get_member();
  $mailmaga = $member_data['custom_member']['mailmaga'];
 
  if($mailmaga) {
    if($mailmaga == "希望する"){
      $acmailer_reg = 'add';
    }elseif($mailmaga == "希望しない"){
      $acmailer_reg = 'del';
    }
    $url = 'http://XXXXXX.com/acmailer3/reg.cgi';
    $data = array(
      'email' => $member_data['mailaddress1'],
      'reg' => $acmailer_reg,
      'encode' => '文字コード',
    );
    $options = array('http' => array(
      'method' => 'POST',
      'content' => http_build_query($data),
    ));
    $contents = file_get_contents($url, false, stream_context_create($options));
  }
 
}
add_filter('usces_filter_membercompletion_page_header', 'acmailer_reg');



会員情報ページからメルマガ登録・解除・登録アドレス変更はjQueryにしてみました。PHPを使うとWelcartのプログラムをいじらなくてはならないから。

jQuery    
//// 会員情報削除時にAcmailerからも削除
function deletemember_check(){
  //確認メッセージ
  var ret = confirm("会員に関する全ての情報が削除されます。よろしいですか?");
  if (ret == true){
    $(function(){
      //メールアドレス取得
      var mailaddress1 = $('.customer_form input#mailaddress1').attr("value");
      //ajaxでacmailerへデータ送信
      $.ajax({
        type: "POST",
        url: "http://XXXXXX.com/acmailer3/reg.cgi",
        data: "email="+mailaddress1+"&reg=del"
      });
      //会員情報削除処理の属性を設定
      $('.send input[name="pre_deletemember"]').after(
        '<input name="deletemember" type="hidden" value="" />'
      );
    });
  }
}
 
$(function(){
  //既存「onclick="〜"」 処理の無効化
  //「会員情報を削除する」ボタンを隠す
  $('.send input[name="deletemember"]').hide();
  //新たに「会員情報を削除する」ボタンを設定
  $('.send input[name="deletemember"]').after('<input name="pre_deletemember" type="submit" value="会員情報を削除する" onclick="return deletemember_check()" />');
});
 
//// 会員情報変更時にAcmailerも更新
$(function(){
  //メールアドレス取得
  var mailaddress0 = $('.customer_form input#mailaddress1').attr("value");
  //メールマガジン購読取得
  var mailmaga0 = $('.customer_form select[name="custom_member[mailmaga]"] option[selected]').text();
  var delivery = '';
  var data = '';
 
  //配信を希望するかしないか
  $('.customer_form select[name="custom_member[mailmaga]"]').change(function () {
    $(this).each(function(){
 
      if( mailmaga0 == '希望する'){
        //「更新する」ボタンを押す前に何回か希望を変えた時の処理
        mailmaga0 = $('.customer_form select[name="custom_member[mailmaga]"] option').next().text();
        delivery = 'N';
      }else if( mailmaga0 == '希望しない'){
        //「更新する」ボタンを押す前に何回か希望を変えた時の処理
        mailmaga0 = $('.customer_form select[name="custom_member[mailmaga]"] option').prev().text();
        delivery = 'Y';
      }else{
        delivery = '';
      }
    });
  });
 
  //「更新する」ボタンクリック時の動作
  $('.send input[name="editmember"]').click(function () {
    //変更後のメールアドレス取得取得
    var mailaddress1 = $('.customer_form input#mailaddress1').attr("value");
 
    //アドレス変更の場合
    if(mailaddress0 != mailaddress1){
      data = "oldemail="+mailaddress0+"&newemail="+mailaddress1+"&reg=edit"+"&encode=文字コード";
      //データ送信
      $.ajax({
        type: "POST",
        url: "http://XXXXXX.com/acmailer3/reg.cgi",
        data: data
      });
 
      //旧アドレスが何故か消えないので
      data = "email="+mailaddress0+"&reg=del"+"&encode=文字コード";
 
    //購読希望変更の場合
    }else{
      if(delivery == 'Y'){
        data = "email="+mailaddress0+"&reg=add"+"&encode=文字コード";
      }else if(delivery == 'N'){
        data = "email="+mailaddress0+"&reg=del"+"&encode=文字コード";
      }else if(delivery == ''){
        data = "";
      }else{
        alert('エラーが発生しました。');
      }
    }
 
    //データ送信
    $.ajax({
      type: "POST",
      url: "http://XXXXXX.com/acmailer3/reg.cgi",
      data: data
    });
 
  delivery = '';
  data = '';
  });
});


Welcartの設定

管理画面からカスタムメンバーフィールドの設定。
WelcartShop→メンバーページ設定→カスタム・メンバーフィールドを選択。
フィールドキー:mailmaga
フィールド名:メールマガジン購読
セレクト値:希望する 希望しない

※「希望する」「希望しない」は改行して1行づつ記入。


Acmailerの設定

「各種設定」→「システム設定」→「削除時の動作」:「確認画面を表示する」のチェックをはずす。
こうしないと削除用データを受け付けてもらえない。


jQueryで一つ問題なのはアドレス変更時になぜか旧アドレスが削除されないこと。

仕方がないので無理矢理削除しています。


とりあえずこれでメールアドレス情報は連動していると思うのですが、、、

どうでしょう??