我有一个自定义功能,用于向Cart Totals添加/删除自定义费用。在购物车阿贾克斯计算期间,该费用正常,但由于某种原因,结账后仍然会收取费用。如何在处理订单之前将其删除?以下是我目前要计算的费用:
function woo_add_cart_fee() {
global $woocommerce;
if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
return;
}
$checkout = WC()->checkout()->checkout_fields;
parse_str( $_POST['post_data'], $post_data );
// Add Fee if no VAT Number is Provided
if($post_data['vat_number'] == '' OR strlen($post_data['vat_number']) < 1 OR empty($post_data['vat_number'])){
$vat_total = 25; // $25.00 fee
$woocommerce->cart->add_fee( __('VAT Fee', 'woocommerce'), $vat_total );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
问题是,一旦用户退房,即使他们提供增值税号(我的自定义字段),也会始终添加费用。
所以我尝试添加此代码段以在处理订单之前完全删除操作,但这似乎也不起作用:
function action_woocommerce_before_checkout_process( $array ) {
if($_POST['vat_number'] == '' OR strlen($_POST['vat_number']) < 1 OR empty($_POST['vat_number'])){
remove_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee', 1 );
}
}
// add the action
add_action( 'woocommerce_before_checkout_process', 'action_woocommerce_before_checkout_process');
我相信我可能正在使用错误的钩子woocommerce_before_checkout_process
,因为它似乎没有被解雇。
任何想法会发生什么?谢谢!
答案 0 :(得分:0)
我能够通过为$woocommerce->cart->add_fee
添加一些控制流来解决这个问题。事实证明,在感谢页面之前再次运行calculate_totals函数
if(isset($_POST['vat_number'])){
if($_POST['vat_number'] == '' OR empty($_POST['vat_number'])){
$woocommerce->cart->add_fee( __($vat_label, 'woocommerce'), $vat_total );
}
} else {
$woocommerce->cart->add_fee( __($vat_label, 'woocommerce'), $vat_total );
}