我使用以下代码片段为购物车中的实物商品添加固定费率手续费。我的公司通过使用优惠券向我们的员工提供免费书籍和免费送货服务,因此如果购物车总额为零,我需要删除这笔费用。不知道如何实现这一点。
/* Add handling to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
global $woocommerce;
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// First test if all products are virtual. Only add fee if at least one product is physical.
$allproductsvirtual = true;
$fee = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
$product = $values['data'];
if( !$product->is_virtual() ){
$allproductsvirtual = false;
}
}
if ( !$allproductsvirtual ) {
$fee = 3.00;
}
$woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}
我已尝试研究该问题,但尚未找到解决方案。
您可以使用以下简化和优化的代码,如果购物车至少有一个实物商品并且购物车总数不同不等于零,则该代码将增加费用:
add_action( 'woocommerce_cart_calculate_fees', 'add_shipping_handling_fee', 10, 1 );
function add_shipping_handling_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( $cart->needs_shipping() && $cart->subtotal > 0 ) {
$cart->add_fee( __('Handling', 'woocommerce'), 3.00, false );
}
}
应该可以。