2021.04.28訂正:WordPress プラグイン Welcart で送料をカスタマイズ:合計個数から個口送料を設定する


「Welcart」 は日本製のWordPress 専用ショッピングカートプラグインです。
ちょー有名なカートプラグイン「WooCommerce」 に比べ、アドオンや拡張機能がすくないものの、
日本的な地域別送料の計算や、カスタマイズが容易なことから、人気のプラグインです。
私も、初心者にもお勧めしやすいショッピングカートプラグインとして、紹介しています。

「Welcart」で送料の計算をする際、買い物点数の合計個数で、1個口、2個口と送料計算をする機会がありました。
その際の送料計算方法をカスタマイズしましたのでメモ的に。

  • 商品を1つずつパッキング。
  • 指定の段ボール1箱に6個まで入るので、6個で1個口の梱包。
  • 送料=個口×地域規定の送料
    例えば、北海道地方の基本送料は1,200円。
    合計個数6個までは基本送料 1,200円。
    合計個数7個以上12個のお買い上げ(2個口)での送料は、1,200×2=2,400円

といった場合に利用できるフィルターです。

下記のソースコードを、テーマのfunctions.php に追記。

/** 商品合計6個毎に送料計算 **/
function my_set_cart_shipping_charge($charge, $cart, $entry) {
    global $usces;
    $unit_border = 6; //制限する個数
    $quantity = $usces->get_total_quantity(); //カートでの合計購入個数

        if($quantity > $unit_border) {
            $charge = $charge * (intdiv($quantity + 5, $unit_border)); 
            //数字「5」のところは $unit_border (制限する個数)から ―1 した数字 にする
            //intdivでの計算結果は整数となるので、カートでの合計購入個数に制限する個数を加算してから除算
        }
    return $charge;
}
add_filter('usces_filter_getShippingCharge', 'my_set_cart_shipping_charge', 10, 3);

ポイントとは、下記。

$charge = $charge * (intdiv($quantity + 5, $unit_border));

intdiv ( int $num1 , int $num2 ) は、num1 を num2 で割った整数商を返すので、
例えば、合計個数 13個の場合、13 ÷ 6 = 2 という値を返します。
いや待て。
6個で1個口なんだから、13個だと「2あまり1」で、箱は3個いるじゃん?
答えは「3」じゃないとダメじゃん?

そうですね。
なので、合計購入個数 $quantity に + 6 したものを、個口単位で割ります。
そうすると、合計個数 13個の場合、(13 +6 ) ÷ 6 =3 あまり 1
intdiv ( 13 +6 , 6 ) は「3」になります。

解決~。


関連記事

©Oz-style