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

Я взял этот код из другого сообщения, и в основном из моего понимания, этот код пытается заставить цену на корзину изменить до фиксированной суммы в 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, '' ); } } } 

Но это работает не так, как ожидалось.

Любая помощь по этому поводу?

благодаря

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

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

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

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