前提・実現したいこと
WordPressプラグインのWelcartで通販サイトを作っています。
同時に注文した商品のサイズによって発送の個口数が変わるため、個口数によって請求する送料が変わるようにしたい。
商品のSKUに重量を設定して、同時に注文した商品の合計重量で個口数を計算し、「個口数×送り先の都道府県別の送料」を計算して請求できるようにしたい。
発生している問題・エラーメッセージ
検索して調べて、SKUに重量を設定するところまではできたが、注文された商品の重量の合計を取得する方法がわからない。
SKUで設定した重量が保存されていないのか、取得方法が間違っているようで、取得しても空欄になってしまう。
試したこと
次のサイトを参考に、重量を設定できるようにしました。
http://web.contempo.jp/weblog/tips/welcart%E3%81%AEsku%E5%86%85%E3%81%AB%E5%85%A5%E5%8A%9B%E9%A0%85%E7%9B%AE%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%80%82
ここで設定した重量をもとに、個口数を計算して、送り先の都道府県別送料×個口数で送料を出したいができていない。
次のサイトを参考に、個口数を計算して、送り先の都道府県別送料×個口数で送料を出そうとしたが、SKUに追加した重量を取得すると値が0になっていて正しい値が取得できない。
https://teratail.com/questions/100686
var_dump($carts);で出力を確認したところ、 「["advance"]=> string(0) ""」となっていて重量のカスタム項目が正しく保存されていないのか、取得できていない状況。
ソースコード
SKUに重量のカスタム項目を追加する部分
functions.phpに記述しています。
PHP
1add_filter( 'usces_filter_sku_meta_form_advance_title', 'add_new_sku_meta_title'); //項目を追加 2function add_new_sku_meta_title(){ 3 return '<th colspan="2">カスタム項目</th>'; 4} 5 6add_filter( 'usces_filter_sku_meta_form_advance_field', 'add_new_sku_meta_field'); //フィールドを新規追加 7function add_new_sku_meta_field(){ 8 return '<td colspan="2" class="item-sku-zaikonum"><input name="newskuadvance" type="text" id="newskuadvance" class="newskuadvance metaboxfield" /></td>'."n"; 9} 10 11add_filter( 'usces_filter_sku_meta_row_advance', 'add_new_sku_meta_row_advance',10,2); //フィールドを追加 12function add_new_sku_meta_row_advance( $default_field, $sku ){ 13 $metaname = 'itemsku[' .$sku["meta_id"]. '][skuadvance]'; 14 return '<td colspan="2" class="item-sku-zaikonum"><input name="' .$metaname.'" type="text" id="' .$metaname. '" class="newskuadvance metaboxfield" value="' .$sku["advance"]. '"/></td>'."n"; 15} 16 17add_filter( 'usces_filter_add_item_sku_meta_value', 'add_new_sku_meta'); //新規項目を作成 18function add_new_sku_meta($value){ 19 $skuadvance = isset($_POST['newskuadvance']) ? $_POST['newskuadvance'] : ''; 20 $value['advance'] = $skuadvance; 21 return $value; 22} 23 24add_filter( 'usces_filter_up_item_sku_meta_value', 'up_new_sku_meta'); //項目を変更 25function up_new_sku_meta($value){ 26 $skuadvance = isset($_POST['skuadvance']) ? $_POST['skuadvance'] : ''; 27 $value['advance'] = $skuadvance; 28 return $value; 29} 30 31add_filter( 'usces_filter_item_save_sku_metadata', 'save_new_sku_meta',10,2 ); //項目を保持 32function save_new_sku_meta( $skus, $mid ){ 33 $skuadvance = isset($_POST['itemsku'][$mid]['skuadvance']) ? $_POST['itemsku'][$mid]['skuadvance']: ''; 34 $skus['advance'] = $skuadvance; 35 return $skus; 36}
重量で送料を再計算する部分
functions.phpに記述しています。
PHP
1// 重量2までを1個口として送料を重量で計算しなおす 2add_filter('usces_filter_set_cart_fees_shipping_charge', 'custom_filter_set_shipping_charge', 10, 3); 3function custom_filter_set_shipping_charge($shipping_charge, $carts, $entries){ 4 5 $weight = 0; 6 foreach($carts as $cart){ 7 $weight += $cart['advance']; //重量を加算したいが、$cart['advance']の値が0になっている 8 } 9 $shipping_charge = intval( $weight / 2 + 0.5 ) * $shipping_charge; 10 return $shipping_charge; 11}
補足情報(FW/ツールのバージョンなど)
WordPress 5.0.2
PHP 7.3.0
Welcart 1.9.14
回答1件
あなたの回答
tips
プレビュー