WCEX Auto Deliveryの購入間隔を修正できる様にする<welcart><wordpress>
wordpressでネットショップを開設するためのプラグイン
welcart
そして更にwelcartの機能を拡張し、定期購入を実装できる様にする
というプラグインがあります。
こちらを使用すると定期購入が出来る様になるため使用している人も多いかと思います。
今日はそんなWCEX Auto Deliveryの管理画面で「購入間隔」を修正できる様にする方法を解説します。
ちなみに購入時であれば購入間隔をカスタマイズするのはとても簡単です。
※javascriptでちょちょいとすれば自由選択でも簡単です。
ですが、一度購入された定期商品の購入間隔を修正するには少し手間が必要になります。
一応データベースをphpMyadminで直接修正することでも修正は可能ですが、できたらWPの管理画面から修正したいところです。
目標としてはこんな感じ、購入間隔の箇所をセレクトボックスにして修正できる様にしていきましょう。
今回は
「wcad_filter_update_regulardetaildata」と「wcad_filter_regular_interval_edit_form」
の二つのフックを使って実装していきます。
まずは「wcad_filter_regular_interval_edit_form」
こちらのフックではセレクトボックスを設置するためにつかいます。
という訳で以下内容をfunctions.phpにでも記述しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function my_wcad_filter_regular_interval_edit_form($text,$detail,$idx){ if($detail["regdet_unit"] == 'day'){ $html = "<select name=\"update-interval_{$idx}\" id=\"update-interval_$idx\">"; for( $i = 1; $i < 31; $i++ ) { $html .= "{$i}日毎" == $text ? "<option value=\"{$i}\" selected>{$i}日毎</option>" : "<option value=\"{$i}\">{$i}日毎</option>"; } $html .= "</select>"; }else if($detail["regdet_unit"] =='month'){ $html = "<select name=\"update-interval_{$idx}\" id=\"update-interval_$idx\">"; for( $i = 1; $i < 7; $i++ ) { $html .= "{$i}ヶ月毎" == $text ? "<option value=\"{$i}\" selected>{$i}ヶ月毎</option>" : "<option value=\"{$i}\">{$i}ヶ月毎</option>"; } $html .= "</select>"; } $html .= "<input type=\"hidden\" name=\"update-interval-name_{$idx}\" value=\"{$detail['regdet_advance']}\">"; return $html; } add_filter('wcad_filter_regular_interval_edit_form','my_wcad_filter_regular_interval_edit_form',10,3); |
内容としてはmonthなのかdayなのかでセレクトボックスの中身を変更する様な内容になっています。
セレクトボックスの中身については、どんな値が欲しいかはケースによって変わると思うので好きに修正していきましょう。
※valueのみ注意しましょう。
ここまでできたら一度動作チェック、
画像の様にセレクトボックスが表示されれば成功です。
ただこの段階ではまだ更新は出来ず、値を変更しても意味はないです。
というわけで次は「wcad_filter_update_regulardetaildata」を使っていきます。
以下をコピペ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function my_wcad_filter_update_regulardetaildata($query,$i){ if($_POST["regdet_interval_{$i}"] !== $_POST["update-interval_{$i}"]){ $my_regdet_advance = urldecode($_POST["update-interval-name_{$i}"]); preg_match('/"interval":"[0-9]*"/u',$my_regdet_advance,$now_interval); $new_regdet_advance = urlencode(str_replace($now_interval,"\"interval\":\"{$_POST["update-interval_{$i}"]}\"",$my_regdet_advance)); $query = str_replace('`regdet_price`', "`regdet_interval` = {$_POST["update-interval_{$i}"]}, `regdet_advance` = '{$new_regdet_advance}', `regdet_price`", $query); } return $query; } add_filter('wcad_filter_update_regulardetaildata','my_wcad_filter_update_regulardetaildata',10,2); |
このコードでは「wcad_filter_regular_interval_edit_form」で設定したセレクトボックスの値を「購入間隔」の値として設定しています。
これでWCEX Auto Deliveryの購入間隔を編集できる様になりました。
welcartではフックが沢山用意してあり、基本的にはプラグインを編集しなくてもどうにかなります。
フックを探すためにコードを調べる必要はありますが便利なのでガンガン使っていきましょう。
2021.06.21
一部コードが間違っていたので修正。
2021.08.10
一部コードを修正。
注文履歴の表示、メール送信で表示される回数が更新されなかったので更新される様修正
2022.10.06
Welcart 2.7以上、WCEX Auto Delivery1.6.1対応するよう修正
WordPress