首页 > 解决方案 > 结账运费计算不正确

问题描述

我有一个多供应商平台。当有人从一位卖家那里订购 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 );

标签: phpjqueryajaxwordpresswoocommerce

解决方案


有 remove_fee 功能吗?如果他们更改运输选项,您可能需要取消任何以前的费用?


推荐阅读