代码之家  ›  专栏  ›  技术社区  ›  user3169905

如果购物车中只有虚拟产品,则不收取手续费

  •  0
  • user3169905  · 技术社区  · 6 年前

    有了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' );
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   user3169905    6 年前

    我知道了。这是有效的代码。

    /* 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' );
    }
    
    推荐文章