我有一个使用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()函数的信息,但如果我可以使它工作,它似乎是合乎逻辑的解决方案。
答案 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');
最后,当我获得成功响应时,刷新购物车页面。