所以,我正在使用我的自定义插件,在该插件中,我需要在woocommerce结账页面上获取邮政编码或邮政编码,并添加我的额外价格和付款。我尝试使用AJAX,它获取邮政编码并将我的价格添加到其中并更新价格。
/**
Here my AJAX Call
**/
global $woocommerce;
//$additional_amount is coming dynamically via an external API
$additional_amount = 5.00; // can vary depending upon zip code
number_format((float)$additional_amount, 2, \'.\', \'\');
$woocommerce->cart->set_total($woocommerce->cart->total + $additional_amount);
然后我将此总数发送给我的AJAX回调,如下所示:
$arr[\'amount\'] = $woocommerce->cart->get_total();
echo json_encode($arr);exit();
它向我显示更新的价格,但当我使用stripe或任何其他支付网关进行支付时,它会向我收取旧价格。
我也这样试过
$fee = 5.00;
$woocommerce->cart->add_fee( \'Handling\', $fee, true, \'standard\' );
但它也不起作用。是否有一种方法可以使用AJAX或任何其他方式将我的额外价格添加到结帐金额中。我正在使用Wordpress 5.4和Woocommerce 4.0.1版
SO网友:Husnain Ahmed
由于我试图向我的费用中添加一些额外金额,因此无法更新费用金额。我尝试的代码是使用AJAX调用的:
$woocommerce->cart->set_total($woocommerce->cart->total + $additional_amount);
但真正的问题是我的付款方式,而不是购物车的价格。所以,我使用一个过滤器解决了这个问题,该过滤器发生在费用金额即将发送到数据库和支付网关之前。对我有效的代码是:
function additional_amount($order){
$total_additional_amount = $amount1 + $amount 2;
$total_additional_amount = round($total_additional_amount, 2);
$order->set_total( $total_amount);
}
add_filter( \'woocommerce_checkout_create_order\', \'additional_amount\', 10, 1 );
使用此过滤器,我可以更新实际费用金额。我希望这会对某人有所帮助。