【EC-CUBE3】特定の市内・市外・区・市町村単位で送料を変更するカスタマイズ(複数対応可能)

【EC-CUBE3】特定の市内・市外・区・市町村単位で送料を変更するカスタマイズ(複数対応可能)

【EC-CUBE3】特定の市内・市外・区・市町村単位で送料を変更するカスタマイズ(複数対応可能)

【EC-CUBE3】特定の市内・市外・区・市町村単位で送料を変更するカスタマイズ(複数対応可能)
最終更新日:2020.08.25
「EC-CUBE(イーシーキューブ)」は、株式会社ロックオンのEC構築パッケージを誰でも無料で利用・改変できる「オープンソース」として公開したものです。ダウンロードは無料。必要な機能は揃っているので、すぐに開店することができます。改変も自由なので、カスタマイズをすれば、オンライン予約やカスタムオーダーなど、ASPサービスでは実現できない様々な販売形態のサイトを作ることもできます。さらに、物流・決済・広告などネットに留まらないリアル領域の各種EC周辺サービスととの無限の組み合わせによって、独自のショッピングプラットフォームを構築することができます。

引用:EC-CUBE公式サイトオープンソースのメリットより/

特定の市区町村のみ送料を変更するカスタマイズ

「EC-CUBE(イーシーキューブ)」は無料で提供されている機能にプラグイン(無料・有料あり)を追加して機能拡張出来ます。
しかし、プラグイン提供されていない機能はベースのPHPファイルをカスタマイズして機能追加する必要があります。

都道府県、商品別での送料設定はデフォルトで可能なのですが、さらに細かい市区町村での送料指定は出来なかったのでカスタマイズしてみました。

バージョン EC-CUBE3系(eccube-3.0.16)
ファイルの場所 /src/Eccube/Service
ファイル名 ShoppingService.php

※ECCUBEのコアな部分を変更します。バックアップを取るなど万全の体制でお願いします。

配送先指定に条件を与え、市内・市外・区・市町村単位で送料を変える

例:東京都千代田区の場合は1620円、大阪市の場合は送料無料になるカスタマイズ
北海道の場合は通常送料だけど、東京都千代田区の場合は1620円、大阪市内は送料無料になる

東京都千代田区の場合

1620円の送料に変更される
東京都千代田区の場合は1620円、大阪市内の場合は送料無料になるカスタマイズ

大阪市内の場合

無料になっている
東京都千代田区の場合は1620円、大阪市市内の場合は送料無料になるカスタマイズ

指定地域以外の場合

管理画面で都道府県、商品別に設定した送料になります。

ShoppingService.phpの編集

【/src/Eccube/Service】→【ShoppingService.php】を開いて該当箇所を差し替えます。

変更する項目
「配送商品情報を作成」…カート画面で表示
「配送料金の設定」…配送料金テーブル書き換え
「受注情報、お届け先情報の更新」…お届け先情報・メール本文に表示
変更は三箇所ありますが全部変数名が違うので注意してコピペしてください。

559行目 配送商品情報を作成


        // 商品ごとの配送料合計
        $productDeliveryFeeTotal = 0;
        if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
            $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity;
        }

        $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal);

コピー

        // 商品ごとの配送料合計
        $productDeliveryFeeTotal = 0;
        if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
            $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity;
        }

        // 地域ごとの配送料合計
        $Address = $Shipping->getAddr01();
        $Osaka = "大阪市";
        $Tokyo = "千代田区";

        if(strpos($Address, $Osaka) !== false){
          $Shipping->setShippingDeliveryFee(0);
        }else if(strpos($Address, $Tokyo) !== false){
          $Shipping->setShippingDeliveryFee(1500);
        }else{
          $Shipping->setShippingDeliveryFee($deliveryFee->getShippingDeliveryFee() + $productDeliveryFeeTotal);
        }

672行目 配送料金の設定


        // 商品ごとの配送料合計
        $productDeliveryFeeTotal = 0;
        if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
            $productDeliveryFeeTotal += $this->getProductDeliveryFee($Shipping);
        }

        $Shipping->setShippingDeliveryFee($deliveryFee->getFee() + $productDeliveryFeeTotal);

コピー


        // 商品ごとの配送料合計
        $productDeliveryFeeTotal = 0;
        if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
            $productDeliveryFeeTotal += $this->getProductDeliveryFee($Shipping);
        }

        // 地域ごとの配送料合計
        $Address = $Shipping->getAddr01();
        $Osaka = "大阪市";
        $Tokyo = "千代田区";

        if(strpos($Address, $Osaka) !== false){
          $Shipping->setShippingDeliveryFee(0);
        }else if(strpos($Address, $Tokyo) !== false){
          $Shipping->setShippingDeliveryFee(1500);
        }else{
          $Shipping->setShippingDeliveryFee($deliveryFee->getFee() + $productDeliveryFeeTotal);
        }

829行 受注情報、お届け先情報の更新


            // 商品ごとの配送料合計
            $productDeliveryFeeTotal = 0;
            if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
                $productDeliveryFeeTotal += $this->getProductDeliveryFee($Shipping);
            }
            $Shipping->setShippingDeliveryFee($deliveryFee->getFee() + $productDeliveryFeeTotal);

コピー


            // 商品ごとの配送料合計
            $productDeliveryFeeTotal = 0;
            if ($this->BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
                $productDeliveryFeeTotal += $this->getProductDeliveryFee($Shipping);
            }

            // 地域ごとの配送料合計
            $Address = $Shipping->getAddr01();
            $Osaka = "大阪市";
            $Tokyo = "千代田区";

            if(strpos($Address, $Osaka) !== false){
              $Shipping->setShippingDeliveryFee(0);
            }else if(strpos($Address, $Tokyo) !== false){
              $Shipping->setShippingDeliveryFee(1500);
            }else{
              $Shipping->setShippingDeliveryFee($deliveryFee->getFee() + $productDeliveryFeeTotal);
            }

まとめ

if文の条件を追加してあげるともっと細かい設定も可能です。
離島の送料を+1000円したり、区内は全部送料無料にしたり出来ます。
条件を追加して使ってみてください!