一定金額以上の買物で送料無料ではなく値引き
スポンサーリンク
「10,000円以上のお買物で送料300円引き」といった場合に行うカスタマイズ方法です。
Welcartでは、一定金額以上のお買物で送料無料とする設定は出来ますが、デフォルトで値引きの設定はなく、フィルターフックを利用する必要があります。
事前準備
Welcartの基本設定ページでは、送料無料条件の項目は空欄(設定なし)としておきます。
利用するフック
- フックの記述・・・usces_filter_set_cart_fees_shipping_charge
- フックの場所・・・use-e-shop/classes/useshop.class.php
カスタマイズ方法
利用中のテーマのfunctions.phpに、以下を追加するだけです。
//10,000円以上で送料300円引き add_filter( 'usces_filter_set_cart_fees_shipping_charge', 'my2_filter_set_cart_fees_shipping_charge', 10, 3); function my2_filter_set_cart_fees_shipping_charge($shipping_charge, $carts, $entries){ if ($entries['order']['total_items_price'] >= 10000) { $shipping_charge -= 300; } return $shipping_charge; }
※使用しているフックが「特定地域への配送料を加算する方法」と同じなので、ユーザー定義関数の接頭語を、特定地域配送料のカスタマイズの時の物と被らないようにmy2_としています。同時にそれらのコードを使う時に、ユーザー定義関数が同じにならなければ、何でもOKです。
もうちょっといい書き方がないか目下検証中ではありますが、現時点での私のレベルではこんなところかと・・・。
金額の数字を自由に変えてカスタマイズ
値引きの金額の設定部分は5行目の$shipping_charge -= 300;です。数字は自由に変えて下さい。
また、4行目の条件分岐のif文の中身(カートの合計金額:total_items_priceの数字)を変えれば、好きなお買上金額で好きな値引き送料を設定することが出来ます。
以下の画像の例では、通常送料630円を、1万円以上のお買上で送料315円引きと設定したものです。
こんにちは。通りすがりのものです。
こちらのカスタマイズを試してみたのですが、配送方法が複数あるとうまくいかないんでしょうか。
配送方法は3つあって、一番高い宅配便をXX円以上で送料無料にしようと設定すると、安い配送オプションでは送料の差額分が「-YYY」円でカウントされるようです。
welcartのバージョンはVersion 1.4.14です。
こんにちは。検証までしておりませんが、特定の配送方法(仮に宅配便A)のみでカスタマイズなさりたい場合は、
というように組み立てれば出来るのではないでしょうか。ただ、もともとの送料無料金額の設定などにより、コードの作り方が多少変わってくる可能性はあるかと存じます。
こんばんは。わざわざご返答ありがとうございました。
今回、特定の配送方法のみでこれを反映させたいわけではなくて、単純にどの配送オプションでも値引きしたあとの送料がマイナスにならなければよいということで、
if ($shipping_charge < 0) {$shipping_charge = 0;}
(マイナス値の場合は0)
これをコードのなかに入れたいのですが、もしよろしければご教授いただけないでしょうか。カスタマイズ云々というよりPHPの基礎だと思いますが。。
たぶん配送オプションがひとつだけというショップもあまりないと思うので、このカスタマイズを検討されている当方のようなプログラミングの素人には有益な情報になりそうに思います。
PHPの書き方はそれで問題ないかと存じます。入れる場所は
$shipping_charge -= 300;
とした直後です。はじめまして。
上記フックについて質問です。
北海道と沖縄のみ、6000円以上お買上げで送料400円、15000円以上お買上げで送料無料とする条件を付けたいのですが、まずは15000円以上の条件を付けようと思い下記フックをfunction.phpに挿入しても動作しません。
原因は、何でしょうか?
//北海道からの注文で15,000円以上購入の場合のみ送料を0円にする//
add_filter(‘usces_filter_set_cart_fees_shipping_charge’, ‘my1_filter_set_cart_fees_shipping_charge’, 10, 3);
function my1_filter_set_cart_fees_shipping_charge($shipping_charge, $cart, $entry){
$myprefs = array(‘北海道’); //都道府県を指定
if(in_array($entry[‘delivery’][‘pref’], $myprefs) and ($entry[‘order’][‘total_items_price’] >= 15000) ){
$shipping_charge = 0; //金額を指定
}
return $shipping_charge;
}
wordpressテーマはtwenty ten
welcartバージョンは1.4.15.1505012
です。
よろしくお願いします。
引用符(クオテーション)が全角だからではないでしょうか?
ご回答、ありがとうございます。
引用符は、全て半角で入力しており、
念のため半角で再度入力しましたが、変化がありません。
function内への書き込み位置は、合ってますか?
/* Shows the same border as on front end */
#headimg {
border-bottom: 1px solid #000;
border-top: 4px solid #000;
}
/* If header-text was supported, you would style the text with these selectors:
#headimg #name { }
#headimg #desc { }
*/
= 15000) ){
$shipping_charge = 0; //金額を指定
}
return $shipping_charge;
}
add_filter(‘usces_filter_set_cart_fees_shipping_charge’, ‘my1_filter_set_cart_fees_shipping_charge’, 10, 3);
/**
* Show a home link for our wp_nav_menu() fallback, wp_page_menu().
*
* To override this in a child theme, remove the filter and optionally add
* your own function tied to the wp_page_menu_args filter hook.
*
* @since Twenty Ten 1.0
*
* @param array $args An optional array of arguments. @see wp_page_menu()
*/
すみません、コードがうまく送信できません。
何か方法はありますか?
何度も失礼します。
解決いたしましたm(__)m
ありがとうございました。
左様でございましたか。それは良かったです!