根据WooCommerce中的特定购物车总额添加费用

时间:2017-09-06 19:04:18

标签: php wordpress woocommerce cart hook-woocommerce

我正在尝试根据艺术总数中的具体金额添加费用。我想显示如果购物车总数等于或大于总“$$$”金额添加费用,否则请勿添加。

我知道这可以将它添加到总数中,但我认为它不会检查它是否低于美元金额。

function woo_add_custom_fees(){

    $cart_total = 0;

    // Set here your percentage
    $percentage = 0.15;

    foreach( WC()->cart->get_cart() as $item ){ 
        $cart_total += $item["line_total"];
    }
    $fee = $cart_total * $percentage;

    if (  WC()->cart->total >= 25 ) { 

     WC()->cart->add_fee( "Gratuity", $fee, false, '' );

    }

    else {

        return WC()->cart->total;
    }
}
add_action( 'woocommerce_cart_calculate_fees' , 'woo_add_custom_fees' );
add_action( 'woocommerce_after_cart_item_quantity_update', 'woo_add_custom_fees' );

我做错了什么?

1 个答案:

答案 0 :(得分:4)

woocommerce_cart_calculate_fees 操作挂钩中,WC()->cart->total始终返回 0 ,因为此挂钩会在购物车总计算之前触发...

  

您最好使用 WC()->cart->cart_contents_total

此对象已经包含在此钩子中,因此您可以将其作为参数添加到钩子函数中。
你也不需要使用这个钩子 woocommerce_after_cart_item_quantity_update

以下是您重新访问的代码:

add_action( 'woocommerce_cart_calculate_fees', 'custom_fee_based_on_cart_total', 10, 1 );
function custom_fee_based_on_cart_total( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // The percentage
    $percent = 15; // 15%
    // The cart total
    $cart_total = $cart->cart_contents_total; 

    // The conditional Calculation
    $fee = $cart_total >= 25 ? $cart_total * $percent / 100 : 0;

    if ( $fee != 0 ) 
        $cart->add_fee( __( "Gratuity", "woocommerce" ), $fee, false );
}

代码放在活动子主题(或主题)的functions.php文件中,或者放在任何插件文件中。

此代码经过测试并有效。