オプション設定による料金値引きについて

フォーラム 使い方全般 オプション設定による料金値引きについて

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

    お世話になります。

    商品合計3900円以下の場合に送料を一律150円引きにしたいのですが、
    オプションで商品毎にギフトラッピングの選択が出来るようにしており、
    一商品でもオプション(ギフトラッピング)を選択した場合は、例外としたいです。
    そのようなことは可能でしょうか?

    現状、以下の構文をfunction.php最下部に作成しております。
    これにオプション選択をした場合に例外とする構文を付け加えたいのです。

    //Welcartで合計3900円以下のお買い物すると送料150円引き
    add_filter( ‘usces_filter_set_cart_fees_shipping_charge’, ‘my_filter_set_cart_fees_shipping_charge’, 10, 3);
    function my_filter_set_cart_fees_shipping_charge($shipping_charge, $carts, $entries){
    if ($entries[‘order’][‘total_items_price’] <= 3900) {
    $shipping_charge -= 150;
    }
    return $shipping_charge;
    }

    ご教授いただければ幸いです。
    宜しくお願い致します。

    ——————————————-
    WordPress のバージョン:6.4.3
    Welcart のバージョン:2.8.23.2309251
    PHP のバージョン:7.4.30
    Welcart専用の拡張プラグインとバージョン:WCEX Multi Price 1.3.2,Welcart e-Commerce 2.8.23
    ご利用の親テーマとバージョン :Welcart Assertive 1.4.2
    ご利用の子テーマとバージョン :Welcart Assertive Child Theme 1.0
    症状を確認したブラウザ:Google Chrome
    サーバー【重要】:heteml ベーシックプラン
    ——————————————–

    #101456
    ikeda
    キーマスター

    tanion-gaeshi-com 様
    こんにちは。
    大変申し訳ありませんが、カスタマイズのレクチャを行うことはできません。
    ご自身での作業が難しい場合は、WelCustomよりご相談ください。
    ご理解いただけますと幸いです。

    #101459

    ikeda様

    承知いたしました。
    ご回答頂き、ありがとうございました。

    #101533
    Alicia
    参加者

    tani.on-gaeshi.com 様

    こんにちは。

     気になっていたものの、時間が取れなくてすっかり遅くなってしまいました。
    もう、これを見ることはないかもですが、他の方が参考にされるかもしれませんのでメモしておきます。

    商品合計3900円以下の場合に送料を一律150円引きにしたいのですが、
    オプションで商品毎にギフトラッピングの選択が出来るようにしており、
    一商品でもオプション(ギフトラッピング)を選択した場合は、例外としたいです。

     そのお気持ちすごくよくわかります。特に、「〇〇円以下」の「以下」ってところが・・・。送料で稼ぎたいわけじゃないので、できるだけ安くしたいけど・・・。
    ギフトラッピングにすると、包装用の箱の中に更に化粧箱が入るので、包装用の箱のサイズが変わっちゃうんですよね。たぶん。だから除外・・・。

     素人の私は、たまにしかプログラムを書かないので、すぐに忘れてしまいます。なので、今回お手伝いさせてもらいました。ですが、最近プログラムというものを初めて書き始めたばかりですので、何の保証もできません。しっかりバックアップを取ってからにしてくださいね。

    WCEX Multi Price をご利用ですので、ギフトラッピングの箱代などは、それで徴収されるのだと思います。私の場合、オプションがとても多くなってしまったので、色んな独自のルールがあるために、オプションの先頭8文字をコード化して、フロント側では見えないように消去しています。その為、そのコードで厳格に引っ掛けてゴニョゴニョと色々しているのですが、今回はわかりやすく、「ギフトラッピング」という文字列を含んでいれば、という条件にしました。簡素化したせいで予期せぬ動きをするかもしれませんので、気になったらご自身で変更してください。
    Welcart 本体の送料無料の機能も、せっかくなので残しておきます。

    【注意事項】
    PHP8.0 ~ 新設された str_contains() を使っています。
    今、お使いの

    PHP のバージョン:7.4.30

    では、機能しません。
    PHPを更新して、8.0にする(8.1以上は、他のプラグインなどの対応状況がわからないうちは、やめておいた方がいいと思います。)か、ご都合が悪いようでしたら strpos() や strstr() に変更するなどしてください。

    add_filter( 'usces_filter_set_cart_fees_shipping_charge', 'my_filter_set_cart_fees_shipping_charge', 10 );
    function my_filter_set_cart_fees_shipping_charge(){
    	// 変数の一部は、フックから取っても構いません。
    	
    		global $usces, $usces_entries;
    
    		$carts = $usces->cart->get_cart();
    		$entries = $usces->cart->get_entry();
    		$total_items_price = $usces->get_total_price();
    		$entries['order']['total_items_price'] = $total_items_price;
    		
    		// 一応、Welcart 本体の送料無料条件 は機能するように残しました
    		if( empty( $usces->options['postage_privilege'] ) || $total_items_price < $usces->options['postage_privilege'] ) {
    			$shipping_charge = $usces->getShippingCharge( $entries['delivery']['pref'], $carts, $entries );
    
    			$carts = $usces->cart->get_cart(); //カートの中身を抽出する
    			$counter = 0;// カウンター初期化
    			foreach($carts as $cart_key => $cart_row){ //カートの中身からカートの行番号となるKeyと内容を1行ごと(1つの注文ごと)に抽出してループする
    
    				$opt = $carts{"$cart_key"}["options"]; //1つ目の注文からオプションデータのみ抽出する
    
    				foreach($opt as $opt_key => $value){ //オプションデータから共通オプションのKeyと中身を抽出してループする
    					
    					$wrapping_name = 'ギフトラッピング';// ← ← ← ← ← ← ←  ここに、除外したいオプションの任意の文字列を入力する
    					
    					if( str_contains( urldecode($value), $wrapping_name)){ // オプションのセレクト値に $wrapping_name が含まれる場合 (注 str_contains PHP 8.0~)
    						$counter ++;// 1ループごとにカウントしていく
    					}
    				}
    			}
    			// カウンターが0のまま(ギフトラッピングがなかった)、且つ 商品合計 3,900円以下だったら
    			if( $counter <= 0 && $total_items_price <= 3900){
    				$shipping_charge -= 150;		
    			}
    		} else {
    			$shipping_charge = 0;// Welcart 本体で送料無料の条件を満たした場合
    		}
    	return $shipping_charge;
    }
    • この返信は1ヶ月、 2週前にAliciaが編集しました。
4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。