php - 结账运费计算不正确
问题描述
我有一个多供应商平台。当有人从一位卖家那里订购 2 种产品时,他几乎没有(比如说 2 种)可供选择的送货方式。
选项 1:10 美元 选项 2:20 美元
如果客户选择option 1
第一个产品和option 2
第二个产品,总费用将为10+20=30$
。这工作正确。如果他选择option 1
第一和option 1
第二,总费用将仅为10$
,因为选项相同。这也很好用。但是当他选择option 1
第一个,然后option 2
选择第二个(它去10+20=30$
)但然后决定选择第二个(或第一个option 2
。否则使其相等)option 1
,那么费用必须成为10$
仅因为相同的费用。但事实并非如此。它停留30$
。似乎我可以将费用更改为更高的价值,但不能降低它。这是我的代码:
add_action( 'wp_ajax_woo_get_ajax_data', 'bbloomer_checkout_radio_choice_set_session' );
add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'bbloomer_checkout_radio_choice_set_session' );
function bbloomer_checkout_radio_choice_set_session() {
if ( isset($_POST['radio']) ){
global $woocommerce;
$totalRadio = 0.00;
$outRadio = [];
$vendorsIDshippingValue = [];
$counter = 0;
foreach ($_POST['radio'] as $key => $value) {
$value = str_replace(".", "-", $value);
$radio = sanitize_key( $value );
$radio = str_replace("-", ".", $radio);
$nameArray = explode("_", $key);
$productID = $nameArray[count($nameArray) - 3];
$vendor_id = get_vendor_from_product( $productID );
//If the vendor doesn't exist - add to shipping price to total
if ( ! array_key_exists($vendor_id, $vendorsIDshippingValue) ) {
$vendorsIDshippingValue[$vendor_id][] = $radio;
//If vendor does exist
} elseif ( ! in_array($radio, $vendorsIDshippingValue[$vendor_id]) ) {
$vendorsIDshippingValue[$vendor_id][] = $radio;
} else {
die();
}
$totalRadio = $totalRadio + (float)$radio;
WC()->session->set('radio_chosen'.$productID.'_'.$nameArray[count($nameArray) - 2], $radio );
$woocommerce->cart->add_fee( __('Option Fee', 'woocommerce'), $totalRadio );
echo json_encode( $totalRadio );
}
die();
}
}
$totalRadio
总是正确的。但是这条线似乎不想正确应用它:$woocommerce->cart->add_fee( __('Option Fee', 'woocommerce'), $totalRadio );
。
解决方案
有 remove_fee 功能吗?如果他们更改运输选项,您可能需要取消任何以前的费用?