根据购物车总金额的百分比存款

时间:2017-03-06 01:55:50

标签: php wordpress woocommerce cart woocommerce-bookings

我从其他帖子中获取此代码,基本上是根据我的理解,此代码试图强制将购物车价格更改为40美元的固定金额,并将其作为预订费用。

我想要做的是强制购物车金额为购物车中所有商品的总和的20%。我的网站用于预订,因此我只想收取押金,然后让他们在使用预订时付款。

以下是此帖子中的代码:Woocommerce cart deposit

add_action( 'woocommerce_cart_calculate_fees', 'booking_fee' );
function booking_fee() {
    global $woocommerce;

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

    $bookingfee_array = array( '2434' );

    $fixed = 40.00;

    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {

        if( in_array( $values['product_id'], $bookingfee_array ) ) {
            $surcharge = $fixed;
            $woocommerce->cart->add_fee( 'Broneeringutasu', $surcharge, true, '' );
        }

    }

}

以下是我将如何改变它:

add_action( 'woocommerce_cart_calculate_fees', 'booking_fee' );
function booking_fee() {
    global $woocommerce;

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

    $bookingfee_array = array( '2434' );

    $percent = .20;

    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {

        if( in_array( $values['product_id'], $bookingfee_array ) ) {
            $surcharge = $percent;
            $woocommerce->cart->add_fee( 'Booking Fee', $surcharge, true, '' );
        }

    }

}

但这并没有像预期的那样发挥作用。

对此有何帮助?

由于

1 个答案:

答案 0 :(得分:2)

您的代码实际上不会按预期执行,因为您需要向购物车总金额添加 o.2 费用。因此,如果购物车金额为 100 ,则总计将为 100.2 ...

您想要做的是删除购物车总金额的80%以获得20%的购物车金额。这可以使用总购车金额的80%的负面费用。如果您不需要像原始代码一样设置目标产品ID,请使用下面的第二个功能。

这是第一个功能,当购物车项目与功能中设置的目标产品ID匹配时,该功能将移除购物车总金额的80%:

add_action( 'woocommerce_cart_calculate_fees', 'booking_deposit_calculation' );
function booking_deposit_calculation( $cart_object ) {

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

    ## Set HERE your targeted products IDs
    $target_product_ids = array( 2434 );

    ## Set HERE your negative percentage (to remove an amount from cart total)
    $percent = -.80; // 80% off (negative)

    $matching = false;

    // Iterating through each cart items
    foreach ( $cart_object->get_cart() as $item_values )
    {
        if( in_array( $item_values['product_id'], $target_product_ids ) )
        { // If a cart item match with a targeted product ID

            // Get cart subtotal excluding taxes
            $cart_subtotal = $cart_object->subtotal_ex_tax;
            // or for subtotal including taxes use instead:
            // $cart_subtotal = $cart_object->subtotal;

            ## ## CALCULATION ## ##
            $calculated_amount = $cart_subtotal * $percent;

            // Adding a negative fee to cart amount (Including taxes)
            $cart_object->add_fee( __('Deposit calculation', 'woocommerce'), $calculated_amount, true );

            break; // We stop the loop
        }
    }
}

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

  

但您可能不需要像原始代码那样拥有一些目标产品。

如果是这样的话,这会简化代码:

add_action( 'woocommerce_cart_calculate_fees', 'booking_deposit_calculation' );
function booking_deposit_calculation( $cart_object ) {

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

    ## Set HERE your negative percentage (to remove an amount from cart total)
    $percent = -.80; // 80% off (negative)

    // Get cart subtotal excluding taxes
    $cart_subtotal = $cart_object->subtotal_ex_tax;
    // or for subtotal including taxes use instead:
    // $cart_subtotal = $cart_object->subtotal;

    ## ## CALCULATION ## ##
    $calculated_amount = $cart_subtotal * $percent;

    // Adding a negative fee to cart amount (Including taxes)
    $cart_object->add_fee( __('Deposit calculation', 'woocommerce'), $calculated_amount, true );

}

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

这两个功能都经过测试和运作