Депозит на основе процента от общей суммы корзины

Я взял этот код из другого поста и, в основном, насколько я понимаю, этот код пытается заставить цену в корзине измениться на фиксированную сумму в 40 долларов и взимать ее как плату за бронирование.

То, что я хочу сделать, это сделать так, чтобы сумма в корзине составляла 20% от общей суммы, основанной на суммировании всех товаров в корзине. Мой сайт для Бронирование, так что я хочу только взимать депозит и затем попросите их заплатить, когда они используют свое бронирование.

Вот код из этого поста: Woocommerce корзина депозита

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

Решение

Ваш код на самом деле не будет делать то, что вы ожидаете, так как вы добавляете плату o.2 на общую сумму корзины. Так что, если сумма в корзине 100, общий итог будет 100.2

Вместо этого вы хотите удалить 80% от общей суммы корзины, чтобы получить сумму корзины 20%. Это возможно при использовании отрицательной комиссии в размере 80% от общей суммы корзины. Если вам не нужно устанавливать идентификаторы целевых продуктов, как в исходном коде, используйте 2-ю функцию ниже.

Вот первая функция, которая удаляет 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 вашей активной дочерней темы (или темы) или также в любой файл плагина.

Обе функции проверены и работают

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]