送料無料条件から送料個別課金の商品を除外する

フォーラム 使い方全般 送料無料条件から送料個別課金の商品を除外する

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #52274
    Takashi Terada
    モデレーター

    動作に関するご質問の場合は必ずご記入ください。


    WordPress のバージョン:WordPress 3.5.1

    Welcart のバージョン:バージョン 1.2.3

    ご利用のテーマ:オリジナル

    症状を確認したブラウザ:safari, chrome

    サーバー(会社名、サービス名):heteml

    SSLの利用: 無し


    Welcartを初めて使用して、オンラインストアを作成しています。

    カスタマイズの必要があり作業していますが、分からない所が有りお手数ですがご助言頂けないでしょうか。

    – 概要 –

    「送料無料条件」を設定した場合でも「送料個別課金」の商品は送料無料の金額判定から外し、送料無料時も「送料個別課金」の商品の送料は課金するようにしたいと思います。

    – カスタマイズ –

    1.「送料無料条件」の判定を変更

    変更対象モジュール:wp-content>plugins>usc-e-shop>classes>usceshop.class.php

    変更対象関数:function set_cart_fees

    変更内容:3行目で「送料無料条件」の判定を外して、一律「getShippingCharge」を呼ぶようにする。

    2.「usces_filter_getShippingCharge」フックを追加

    変更対象モジュール:テーマ内function.php

    追加フック:add_filter( 'usces_filter_getShippingCharge', 'override_getShippingCharge', 10, 3);

    追加関数:「override_getShippingCharge」を追加

    関数内容

    function override_getShippingCharge($charge) {

    // カートの中身を取得
    global $usces, $usces_members, $usces_entries;
    global $usces, $usces_members, $usces_entries;
    $cart = $usces->cart->get_cart();

    // 【送料個別課金】がfalseの商品の金額を集計する変数と、送料の最大を設定する変数
    【商品金額】= 【最大送料】 = 0;

    // 【送料個別課金】がtrueの商品の送料を集計する変数
    【個別課金送料】 = 0;

    // カート内の商品、1件毎に【送料個別課金】を判定して送料を加算します。
    // ただし$cart内には商品の送料情報は有りません
    for($i=0; $i<count($cart); $i++) {

    // カート情報から1商品の情報を取得
    $cart_row = $cart[$i];
    $sku = esc_attr($cart_row['sku']);
    $sku_code = esc_attr(urldecode($cart_row['sku']));
    $quantity = $cart_row['quantity'];
    $itemCode = $usces->getItemCode($post_id);
    $skuPrice = $cart_row['price'];
    $pictid = $usces->get_mainpictid($itemCode);

    // このfor文の中で商品毎に送料情報を取得したい。
    // ・【送料個別課金】がtrueかfalseか
    // ・【送料】

    if(【送料個別課金】がfalse){
    【商品金額】 += $skuPrice * $quantity
    【最大送料】 = 【最大送料】 > 【送料】 ? 【最大送料】 : 【送料】;
    }else{
    【個別課金送料】 += 【送料】;
    }// for文終了

    // 【送料個別課金】がfalseの商品の送料無料条件の判定
    if( !(empty(【送料無料条件の金額】)) && 【商品金額】 > 【送料無料条件の金額】){
    【最大送料】 = 0;
    }// if文終了

    // 送料設定(個別課金送料は送料無料の対象にしない)
    $charge = 【最大送料】 + 【個別課金送料】
    return $charge;
    }

    – 質問 –

    1.「送料無料条件」の判定を変更

    「usceshop.class.php」を変更しますが、既存ファイルを変更しないで済む方法が有れば、教えていただけないでしょうか。

    2.「usces_filter_getShippingCharge」フックを追加

    呼び出した関数内で送料を再計算したいのですが、取得した$cart内には送料の情報が有りません。

    sku等を使って商品毎に送料情報を取得する方法が有れば教えて頂けないでしょうか。

    知りたい情報:

    ・商品毎の【送料個別課金】がtrueかfalseか

    ・商品毎の【送料】

    ・基本設定で設定した【送料無料条件の金額】

    – 確認している情報 –

    類似した問い合わせとして以下のページを確認しています。

    ・ある特定送料の適用

    https://www.welcart.com/forum/topic.php?id=457#post-2030

    要望としては同じリクエストです、こちらの方は「価格変動拡張プラグイン 」で対応していましたが、送料を商品価格として扱うのと、「送料無料条件」の判定額に「送料個別課金」が含まれているので、別途対応で考えました。

    ・送料無料の設定について

    https://www.welcart.com/forum/topic.php?id=1268

    こちらは送料合計金額のみの判断なので、別途対応で考えました。

    ・welcartの管理画面内に個別送料を設定したい

    https://www.welcart.com/forum/topic.php?id=798

    内容は異なりますが、「usces_filter_getShippingCharge」フックに関して参考に致しました。

    以上宜しくお願い致します。

    #66171
    Takashi Terada
    モデレーター

    どうやら自己解決出来そうです、ただ1点不明点が増えたので、お伺いしたいと思います。

    – 自己解決部分 –

    > 1.「送料無料条件」の判定を変更

    > 「usceshop.class.php」を変更しますが、既存ファイルを変更しないで済む方法が有れば、

    > 教えていただけないでしょうか。

    送料計算のフックではなく、送料計算後(関数set_cart_fees内)のフックを使用する事で解決しました。

    フック名:usces_filter_set_cart_fees_shipping_charge

    > 2.「usces_filter_getShippingCharge」フックを追加

    > 知りたい情報:

    > ・商品毎の【送料個別課金】がtrueかfalseか

    > ・商品毎の【送料】

    > ・基本設定で設定した【送料無料条件の金額】

    getShippingChargeを参考に「$this」の箇所を「$usces」に書き換えたら、いけそうです。

    カート内の商品の送料を計算する時に、【送料個別課金】がtrueかfalseで「商品金額と送料」を分けて集計しようと思います。

    ・商品毎の【送料個別課金】がtrueかfalseか

     $usces->getItemIndividualSCharge($rows)

    ・商品毎の【送料】

     $rows * $rows

    ・基本設定で設定した【送料無料条件の金額】

     $usces->options

    – 質問 –

    上記の通り、function「getShippingCharge」を参考にさせて頂きましたが、「foreach ( $cart as $rows )」の中で「送料」を計算する際、「if( -1 == $fixed_charge_id ){」で判断して別々の集計をしています。

    この判定の意味を教えて頂けないでしょうか。

    「$fixed_charge_id」は「$this->options[$d_method_index]」で取得しているので商品毎でなく、基本設定に関連すると思うのですが送料関係(送料無料条件の金額とか)をいじっても、「-1」の分岐にしか行きません。コメントでは「送料ID」とされています。

    送料計算を自作の関数に持ち出すので、不明点は潰しておきたいと思います。

    お手数ですがご説明願えないでしょうか。

    – 要望 –

    今回は問題は解決しそうですが、送料計算を自作の関数に持ち出す事に不安感はあります。

    商品毎に送料を「送料無料条件」判定の対象にするかの設定が出来るようになると助かります。

    現在でも高機能でバランスの取れたオンラインストアだと思います、今後改良の余地があれば宜しくお願い致します。

    以上

    #66172
    nanbu
    キーマスター

    こんにちは。

    送料計算のフックではなく、送料計算後(関数set_cart_fees内)のフックを使用する事で解決しました。

    フック名:usces_filter_set_cart_fees_shipping_charge

    はい、それをご利用ください。

    「foreach ( $cart as $rows )」の中で「送料」を計算する際、「if( -1 == $fixed_charge_id ){」で判断して別々の集計をしています。

    この判定の意味を教えて頂けないでしょうか。

    Welcartの送料の算出は大きく分けて2通りがあります。一つは配送方法ごとに送料が変わる場合と、商品ごとに送料が変わる場合です。

    商品ごとに送料が変わる場合の動作は、商品ごとに指定した送料のうち、カート内にある一番高い送料が適用されるようになっています。この送料ルールを適用するには、配送設定にて、配送方法の送料固定で「送料を固定しない」を選択することになります。

    if( -1 == $fixed_charge_id ){ は「送料を固定しないの場合」ということになります。つまり商品ごとに設定された送料を適用するということです。

    今回は問題は解決しそうですが、送料計算を自作の関数に持ち出す事に不安感はあります。

    こちらでも送料のカスタマイズを行う場合は、このフックを使って計算し直していますので問題はありませんが、確かに「送料無料条件」判定の対象にするかの設定が出来るオプションがあると良いかもしれません。

    ただ、Welcartの送料計算は現在でも非常に複雑になっていますので、これ以上設定を複雑にしたくないという考えもあります。

    ですので現状で対応できない場合は、カスタマイズで対応できるようフックを設置しているのです。

    #66173
    Takashi Terada
    モデレーター

    たびたびすいません、動作チェックしていたら何となく分かりました。

    > 「送料」を計算する際、「if( -1 == $fixed_charge_id ){」で判断して別々の集計をしています。

    > この判定の意味を教えて頂けないでしょうか。

    これは管理画面の「配送設定 > 配送方法」で、「送料固定」を固定にしているかどうかの判定みたいですね。

    固定にしていないと「-1」が設定されて商品情報から選択されている送料を取得して、固定にされていると固定の送料を設定するように見えます。

    ここの仕組みが分かると配送設定のバリエーションの広さが分かり、改めて汎用性の高いオンラインストアだと感心しました。

    お騒がせしてすいません、質問事項に関しては全て解決で解釈して下さい。(要望だけは残しておいて下さい。)

    > – 要望 –

    > 商品毎に送料を「送料無料条件」判定の対象にするかの設定が出来るようになると助かります。

    #66174
    Takashi Terada
    モデレーター

    nanbuさん、ご回答ありがとうございました。

    投稿が前後してしまい、回答の確認前に投稿してしまいました、土曜なのにすいませんです。

    要望の件も「複雑」化する事に納得です。

    フックでのカスタマイズのし易さと、計算自体は既存の関数を呼び出して行なっている事を考えると、前回記載した「不安感」というのはちょっと大げさでした。

    全て解決です、丁寧な説明ありがとうございました。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。