特定の商品がカートに入っている時に、支払い方法を限定する方法
スポンサーリンク
Welcartで、特定の商品がカートに入っている場合に、支払い方法を限定させる方法です。
特に高額商品などではクレジットカードのみとするケースや、予約商品で代引きやコンビニ払いのみ等にする場合などで、支払い方法を固定させる時に有効です。
もくじ
1. 利用するフック
フックは、発送・支払方法ページで支払い方法を出力させる、usces_the_payment_method($value, $out)という関数の中に設置されています。
- フックの記述:usces_fiter_the_payment_method
- フックの場所:template_func.php
2. functions.phpにフックを記載
普通のフックと同様です。後述しますが、自分が設定しているWelcartの支払方法によってパラメータが変わってきます。
例えば以下は、支払設定の上から二番目を「Paypal」、決済種別を「Paypal決済」にしていた場合に、「特定商品がカートに入っている際に支払い方法をPaypalに限定する」書き方です。
//特定の商品の場合に支払い方法を限定 add_filter('usces_fiter_the_payment_method', 'my_the_payment_method', 10, 2); function my_the_payment_method($payments, $value){ global $usces; $carts = $usces->cart->get_cart(); $mysku = array('SKU001', 'SKU002'); //特定の商品のSKU foreach($carts as $cart){ $sku = $cart['sku']; if(in_array($sku, $mysku)){ $payments = array( array( 'id' => 1, 'name' => 'Paypal', //支払方法名 'explanation' => 'クレジットカードでの支払いはこちら', //説明 'settlement' => 'acting_paypal_ec', //決済種別 'module' => '', //決済モジュール 'sort' => 0, //表示順序 'use' => 'activate', //activeで「使用」 ), ); } } return $payments; }
6行目で変数$myskuに、支払い方法を限定させたい商品ののSKUを代入しています。
10行目で書いている$paymentsの中身(array以下)が、限定させたい支払方法のパラメータを指定している部分です。
パラメータの指定方法
パラメータの指定方法は、大まかに以下のようになります。
パラメータ | 指定値 | |
---|---|---|
id | 0、1、2、3・・・(決済の設定順※一番上が「0」) | |
name | 支払方法名 | |
explanation | 説明 | |
settlement | 決済種別 | 「COD」代金引換 |
「acting」代行業者決済 | ||
「acting_paypal_ec」Paypal決済 | ||
「transferAdvance」振込み(前払い) | ||
「transferDeferred」振込み(後払い) | ||
module | 決済モジュール | |
sort | 0、1、2、3・・・(表示順序※一番上が「0」) | |
use | 「active」 で使用、「deactivate」で停止 |
3. 自分が使っている支払い方法のパラメータを確認する方法
決済の設定内容はECサイト毎で違ってくるので、一番確実なのは自分でパラメータを確認することです。
複数のパラメータを擁している変数(今回で言うと$payments)のデータは、PHPのprint_r関数を使うことによって画面上に出力させることが出来ます。
print_r($payments);
上記のコードを、先ほどのコードの中の7行目のforeachより前に入れてみて下さい。
「発送・支払方法」ページを表示した時に、設定している支払方法のデータが全て出力されます。
ちょっと見づらいかもしれませんが、自分が設定した支払方法について、[0][1][2][3]の順で、パラメータを確認することが出来ます。
基本はこのパラメータを使って、先ほどのコードの中に入れればOKです。
もちろん、全てを元のデータと同じように記述する必要はありません。例えば、先ほどのコードのexplanation(説明)のパラメータを「○○ご注文の場合は、支払方法は△△のみになります」などと書き換えてもいいと思います。
※パラメータの確認が完了したら、print_r($payments);は削除しましょう。
4. まとめ
途中で支払方法のパラメータの確認が必要になるものの、フックだけで出来るカスタマイズなので気軽に出来ます。
現時点のWelcartでは、カートの中身の商品がどのカテゴリーに属するかというデータを取得することが(多分)出来ないので、一つ一つSKUを指定する必要があるのがちょっと手間でしょうか。
また、この方法では、決済方法を限定される商品が一つでもカートに入っているとフックが作動しますので、他の商品と一緒に注文される可能性がある場合などは、注意書きなども入れておいたほうがいいかもしれません。
こちらの方法を使わせて頂きカスタマイズ出来ました。
ありがとうございました!
それはよかったです♪