首页 > 解决方案 > 动态删除购物车费用 Woocommerce

问题描述

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

当我从 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 );
  } );
}

我主题的functions.php中的clearfees函数

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() 函数的信息非常少,但如果我能让它工作,它似乎是合乎逻辑的解决方案。

标签: ajaxwordpresswoocommerce

解决方案


我这样做是因为我在 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');

最后刷新购物车页面,因为我得到了成功响应。


推荐阅读