动态删除购物车费用Woocommerce

时间:2018-05-08 16:27:11

标签: ajax wordpress woocommerce

我有一个使用Woocommerce插件的WordPress商店。我目前能够使用分配给$woocommerce->cart->add_fee()挂钩的woocommerce_cart_calculate_fees函数在结账时动态添加费用。但是,我也希望能够在结账时取消费用,但我还没有设法让它发挥作用。我试图通过AJAX触发PHP函数,然后使用this method清除费用。

当我简单地回应成功'从clearfees()函数,AJAX调用成功完成。但是,当我尝试调用$ WC() - > cart-> remove_all_fees()时,AJAX失败并出现500错误。

从Javascript中删除AJAX调用费用

function clear_fees() {
  $.ajax({
  type: 'GET',
  url: entrada_params.admin_ajax_url,
  data: { action : 'clear_fees' }
  }).done( function( data ) {
    console.log(data);
  } )
  .fail( function( jqXHR, textStatus, errorThrown ) { // HTTP Error
    console.error( errorThrown );
  } );
}

clearfees在我的主题函数中起作用.php

function clearfees() {

  $WC()->cart->remove_all_fees();
  wp_die();

}

// creating Ajax call for WordPress
add_action('wp_ajax_clear_fees', 'clearfees');
add_action('wp_ajax_nopriv_clear_fees', 'clearfees');

在我的搜索中,我在实践中发现了很少有关remove_all_fees()函数的信息,但如果我可以使它工作,它似乎是合乎逻辑的解决方案。

1 个答案:

答案 0 :(得分:0)

我正在这样做,因为我在function.php中收取费用

add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_cart_total', 10, 1 );
function custom_fee_based_on_cart_total( $cart_object ) {
    if(isset($_GET['implementation'])){
        $charges = (int)$_GET['charges'];
        $cart_total = (int)$cart_object->cart_contents_total;
        $fees = $cart_total + $charges;

        $applyfee = $_SESSION['applyfee'] ? $_SESSION['applyfee'] : 'true';
        if($applyfee == 'true'){
            $cart_object->add_fee( __( "Implementation Charges", "woocommerce" ), $charges, false );
        }else{
            $charges = 0;
            $cart_object->add_fee( __( "Implementation Charges", "woocommerce" ), $charges, false );
        }
    }
}

如果我选择了“删除费用”选项

function clearfees() {

    $_SESSION['applyfee'] = 'false';
}
// creating Ajax call for WordPress
add_action('wp_ajax_clear_fees', 'clearfees');
add_action('wp_ajax_nopriv_clear_fees', 'clearfees');

最后,当我获得成功响应时,刷新购物车页面。