EC-CUBE 4.0.x系 商品数量毎に送料が掛かるカスタマイズ


2.13.x系の時に苦労した件だが、新たにサイトを4.0.x系で制作しなおしたので、
今回もEC-CUBEでカートの中の商品数分の送料を実装する。
(商品1個が大きかったり重かったりして、商品1個毎に送料が掛かる場合を想定)
※例えば、A商品を3つ、B商品を2つ購入した場合には「配送業者別の送料×5」が掛かる時。

/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php

を変更。

130~134行目付近、

            /** @var DeliveryFee $DeliveryFee */
            $DeliveryFee = $this->deliveryFeeRepository->findOneBy([
                'Delivery' => $Shipping->getDelivery(),
                'Pref' => $Shipping->getPref(),
            ]);

の処理の後に、

		// 都道府県送料 * 個数
		foreach ($Shipping->getOrderItems() as $item) {
		$DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity();
		}

を追加。

さらに・・・
144~145行目の

		->setPrice($DeliveryFeeTotal + $deliveryFeeProduct)
                ->setQuantity(1)

の間に先ほどの関数

		->setPrice($DeliveryFeeTotal + $deliveryFeeProduct)

を追加すれば完成。

どなたかのご参考になればこれ幸せ。