前に記事で書いた「商品別送料の計算を変更する」の続編というか…仕様変更。

送料無料の商品A と 送料無料でない商品Bがある。また、送料は一律1000円とする。

この場合、以下の様な送料計算にしたい。

A)送料無料商品Aのみを買った場合(複数でも) → 送料無料
B)送料無料商品Aと送料無料でない商品B(複数でも)を買った場合 → 送料0円
C)送料無料でない商品Bを買った場合(複数でも)ツꀀ→ 送料1000円

赤字のところが変わりました。

商品登録時の「商品送料」を0円に設定して、あとは、「商品別送料の計算を変更する」のプログラム変更後、以下のように付け足します。

data/class/SC_Cartsession.php のL.700あたりからです。

//商品送料無料の商品買ったかのフラグを準備。
$deliv_free_flag = 0;

// 商品ごとの送料を加算
if (OPTION_PRODUCT_DELIV_FEE == 1) {
$cartItems = $this->getCartList($productTypeId);
$deliv_fee_cn = 0;
foreach ($cartItems as $item) {
if($item[‘productsClass’][‘deliv_fee’] != null){
$results[‘deliv_fee’] += $item[‘productsClass’][‘deliv_fee’] * $item[‘quantity’];

//個別送料が0円の商品があればフラグを立てる
if($item[‘productsClass’][‘deliv_fee’] == “0”){
$deliv_free_flag = 1;
}

}else{
$deliv_fee_cn++;
}
}
}

// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1
&& $deliv_fee_cn != 0
&& !SC_Utils_Ex::isBlank($deliv_pref)
&& !SC_Utils_Ex::isBlank($deliv_id)) {
$results[‘deliv_fee’] += $objDb->sfGetDelivFee($deliv_pref, $deliv_id);
}

//個別送料が0円の商品を一つでも買っていれば、送料無料
if ($deliv_free_flag == 1) {
$results[‘deliv_fee’] = 0;
}

赤字を追加しました。

複数送り先のプログラム部分にも同様に追加します。

0円商品買ったらなんでもかんでも送料無料、という仕様です。
商品送料を別に指定していても(500円とかしてても)0円が優先されます。