オプション設定による料金値引きについて
タグ: #オプション設定 #料金値引き
-
投稿者投稿
-
2024年2月27日 5:00 PM #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 ベーシックプラン
——————————————–2024年2月28日 11:52 AM #101456ikedaキーマスターtanion-gaeshi-com 様
こんにちは。
大変申し訳ありませんが、カスタマイズのレクチャを行うことはできません。
ご自身での作業が難しい場合は、WelCustomよりご相談ください。
ご理解いただけますと幸いです。2024年2月28日 1:11 PM #101459ikeda様
承知いたしました。
ご回答頂き、ありがとうございました。2024年3月10日 11:35 PM #101533Alicia参加者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; }
- この返信は8ヶ月、 2週前にAliciaが編集しました。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。