我正在尝试根据艺术总数中的具体金额添加费用。我想显示如果购物车总数等于或大于总“$$$”金额添加费用,否则请勿添加。
我知道这可以将它添加到总数中,但我认为它不会检查它是否低于美元金额。
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' );
我做错了什么?
答案 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文件中,或者放在任何插件文件中。
此代码经过测试并有效。