特定の配送方法で、一定金額以上の場合のみ送料を無料にしたい

フォーラム 使い方全般 特定の配送方法で、一定金額以上の場合のみ送料を無料にしたい

  • このトピックには5件の返信、4人の参加者があり、最後にoikawaにより6ヶ月、 1週前に更新されました。
6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #70641
    kota1010
    参加者

    ——————————————-
    WordPress のバージョン:3.9.1
    Welcart のバージョン:1.4.2
    ご利用のテーマ:オリジナル
    症状を確認したブラウザ:Firefox29 win
    サーバー(会社名、サービス名):海外、IIS
    SSLの利用:未使用
    WordPress のパーマリンク設定:/%category%/%post_id%/
    ——————————————–

    いつも大変お世話になっております。

    やりたいことは、複数の配送方法を設定している中で、
    ある一つの配送方法を選び、なおかつ
    その購入金額が10000円以上になった場合にのみ
    送料を無料にしたい、ということです。

    配送方法が指定したもの以外の場合は、
    指定配送方法でも購入金額10000円未満の場合は
    設定した送料を上乗せにしたいです。

    以下の過去ログを参考にして、

    https://www.welcart.com/community/forums/topic/%E7%89%B9%E5%AE%9A%E3%81%AE%E9%85%8D%E9%80%81%E6%96%B9%E6%B3%95%E3%81%A0%E3%81%91%E5%90%88%E8%A8%88%E5%80%8B%E6%95%B0%E3%81%A7%E9%80%81%E6%96%99%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B

    このようなコードをfunctions.phpに書いてみました。

    add_filter( ‘usces_filter_getShippingCharge’, ‘my_getShippingCharge’, 10, 3);
    function my_getShippingCharge($charge) {
    global $usces;
    $total = $usces->get_total_price( $cart );
    if ($entry == 0) {
    if ($total >= 10000) {
    $charge = 0;
    }
    }
    return $charge;
    }

    が、どの配送方法でも10000円以上が送料無料になってしまいます。

    どうしたらいいのか、教えていただけませんでしょうか。

    ちなみに配送方法のIDは0からの始まりでいいのでしょうか。
    配送設定画面の「配送名」のプルダウンで、
    0:~~~
    となっている一番最初のものに適応させたいのですが。

    この処理ができないといちいち手動対応で
    送料払い戻しといったことをしなければならなくなりそうで、
    非常に困っております。すいませんがどうぞお知恵をお貸し下さい。
    よろしくお願いいたします。

    #70657
    yskysmr
    キーマスター

    配送方法の id は、ソート順(優先順位「0:」)とは別物になります。

    ‘usces_filter_getShippingCharge’ というフィルターフックをお使いですので、そのフックがある「getShippingCharge」関数をご参照ください。

    $entry から「配送方法ID」を取得している箇所があると思います。
    こちらが、サイトで購入者が選択した配送方法の id です。

    次に、優先順位が最上位の配送方法の id は、以下のようにして得られます。

    
    $options = get_option('usces');
    $first_id = $options['delivery_method'][0]['id'];
    

    $options[‘delivery_method’][0] のところが優先順位です。

    また、function my_getShippingCharge の引数は以下のようにしませんと、$cart と $entry は得られませんのでご注意ください。

    
    function my_getShippingCharge( $charge, $cart, $entry ) {
    
    #70676
    kota1010
    参加者

    yskysmr様

    早速にご丁寧なアドバイスいただきまして、本当にどうもありがとうございました。

    一応考えていたことはいただいたアドバイスで実現できたのですが、
    実はもっと複雑な処理が必要だったことが実装後に分かりました・・・orz

    さすがにプログラミング素人ではもう対応できなさそうですので、
    有償カスタマイズも検討しています。

    ひとまずこちらは当初の目的はアドバイスのおかげで達成できました。
    どうもありがとうございました。

    #92880
    oikawa
    参加者

    お世話になっております。
    複数ある配送方法から特定の配送方法(id)を取得して、合計金額が5,000円以上の場合送料無料にするカスタマイズがしたいのですが、配送方法(id=2)の取得がうまくいかないのですが、($entry)では取得できないのでしょうか?お手数おかけしますがご教授いただけますと助かります。何卒、宜しくお願い致します。

    add_filter('usces_filter_getShippingCharge', 'my_filter_getShippingCharge', 10, 3);
    function my_filter_getShippingCharge($charge, $cart, $entry){
    global $usces;
    $total_items_price = $usces->get_total_price($cart);
    if($entry == 2){
    if ($total_items_price >= 5000){
    $charge = 0;
    }
    }
    return $charge;
    }

    ——————————————-
    WordPress のバージョン:5.7
    Welcart のバージョン:2.1.5
    PHP のバージョン:7.4.13
    Welcart専用の拡張プラグインとバージョン:Welcart e-Commerce2.1.5
    ご利用のテーマ:WelcartBasic の自作子テーマ
    症状を確認したブラウザ:firefox
    サーバー【重要】:xserver
    ——————————————–

    #92890
    sagawa
    キーマスター

    oikawa様

    $entryは配列になっています。
    $entry['order']['delivery_method']で発送・支払方法ページで選択された配送方法のIDが取得できるかと思います。

    #92892
    oikawa
    参加者

    お世話になっております。
    配送idを取得し思い通りのカスタマイズができました。
    ありがとうございました。

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