首页 > 解决方案 > 购物车内只有虚拟商品不收取手续费

问题描述

对于 WooCommerce 网站,我试图弄清楚如果购物车中只有虚拟产品,如何停止添加手续费。他们卖的是虚拟礼券和实物商品,所以如果购物车中有实物商品带有虚拟礼券产品,他们仍然需要收费处理。但是,例如,如果客户的购物车中只有一张虚拟礼券,他们就不会被收取手续费。

就添加处理的操作而言,这是我在他们的functions.php 中的内容。我只是不知道该放什么来测试购物车中的虚拟产品。

/* Add handling fee of $3 to cart at checkout */
add_action( 'woocommerce_cart_calculate_fees','handling_fee' );
function handling_fee() {
    global $woocommerce;

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

    $fee = 3.00;
    $woocommerce->cart->add_fee( 'Handling', $fee, false, 'standard' );
}

标签: phpwordpresswoocommerce

解决方案


我想到了。这是有效的代码。

/* Add handling fee of $3 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' );
}

推荐阅读