Однако я сталкиваюсь с некоторыми проблемами, из-за которых моя отрицательная комиссия не учитывается при расчете, независимо от того, использую ли я промежуточный или общий итог для своей логики.
Я пробовал использовать практически любые корзины->get (получатели корзины), и независимо от того, какие из них я использую или комбинирую, я просто не могу заставить свой код вычесть отрицательную комиссию. из общего/промежуточного итога, чтобы получить новый итог.
Мой код работает при использовании купонов, а также для итогов/промежуточного итога корзины без отрицательной комиссии, как вы можете видеть в примерах ниже. . В моем коде я использую промежуточную сумму для вычитания комиссий и скидок, но я также пытался использовать общую сумму, но безрезультатно.
Мой код для установки стоимости доставки равной 0 при достижении суммы X без учета скидки (купона или комиссии):
Код: Выделить всё
add_filter('woocommerce_package_rates', 'null_shipping_costs_conditionally', 10, 2 );
function null_shipping_costs_conditionally( $rates, $package ){
// Shipping method to change price
$methodprice_key_ids = array('flat_rate:4');
// Initialising variables for new shipping price
$found = false;
$min_amount = 750; // threshold
// Calculate Subtotal incl tax
$subtotal_excl_tax = WC()->cart->get_subtotal();
$subtotal_tax = WC()->cart->get_subtotal_tax();
$subtotal_incl_tax = $subtotal_excl_tax + $subtotal_tax;
// Calculate Discount Totals incl tax
$discount_total_excl_tax = WC()->cart->get_cart_discount_total();
$discount_tax_total = WC()->cart->get_cart_discount_tax_total();
$discount_incl_tax = $discount_total_excl_tax + $discount_tax_total;
// Calculate Fee Totals incl tax
$fee_total_excl_tax = WC()->cart->get_fee_total();
$fee_tax_total = WC()->cart->get_fee_tax();
$fee_incl_tax = $fee_total_excl_tax + $fee_tax_total;
// The new cart total value minus fee and coupons
$cart_total = $subtotal_incl_tax - $fee_incl_tax - $discount_incl_tax;
// Check if cart total is bigger than or equal to minimum threshold
if( $cart_total >= $min_amount) {
$found = true;
}
if( $found ) {
foreach( $rates as $rate_key => $rate ) {
// If shipping rate found then change shipping rate price.
if( in_array($rate_key, $methodprice_key_ids) ) {
// Set the rate cost to zero
$rates[$rate_key]->cost = 0;
// Append rate label title (free)
$rates[$rate_key]->label .= ' ' . __( '- gratis', 'woocommerce' );
// Taxes rate cost (if enabled)
$taxes = array();
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $rates[$rate_key]->taxes[$key] > 0 ){
$taxes[$key] = 0;
$has_taxes = true;
}
else {
$has_taxes = false;
}
}
if( isset($has_taxes) && $has_taxes )
$rates[$rate_key]->taxes = $taxes;
}
}
}
return $rates;
}
Код: Выделить всё
// Discount percentage based on item count
if ($items_count >= 6) {
$percent = 15; // Discount percentage
$discount -= $items_subtotal * $percent / 100; // Calculation
$cart->add_fee( __('Mix & Match rabat', 'woocommerce') . " - {$percent}%", $discount );
}
- Полный код скидки можно найти в этой теме SO
- Вот пример, где я иметь товары в моей корзине без применяемых скидок и комиссий. Как вы можете видеть, стоимость доставки устанавливается равной 0 при превышении порогового значения.

Пример 2. Корзина с купоном. Код работает:
- Вот пример, когда в моей корзине есть товары с примененной скидкой по купону. Как вы можете видеть, стоимость доставки равна 0 при превышении порогового значения, исключая скидки по купонам.

Пример 3. Корзина с комиссией. Код не указан. Не работает:
- Вот пример: в моей корзине есть товары, к которым применяется скидка. Как вы можете видеть, для стоимости доставки установлено значение 0, хотя общая сумма без учета скидок ниже порогового значения.

.
Пример 4 – Корзина с комиссией и купон — код не работает:
- Вот пример, где в моей корзине есть товары с примененной скидкой и купонами. Как вы можете видеть, для стоимости доставки установлено значение 0, хотя общая сумма без учета скидок ниже порогового значения.

Чего я пытаюсь достичь:
- Я ищу способ установить стоимость доставки равной 0, когда общая сумма корзины равна или превышает сумму порог 750 без учета скидок (комиссии и купона). Все, включая налоги.
Список литературы:
- Как получить сумму комиссий за доставку и способ оплаты в WooCommerce
- Добавьте рассчитанную комиссию на основе общей суммы после скидок в WooCommerce
- В общей сумме корзины WooCommerce не отображаются дополнительные комиссии, добавленные с помощью add_fee().
- Корзина скидок WooCommerce без использования метода add_fee.
- Вычитание промежуточной суммы корзины из общей суммы корзины. проблема с ошибкой в WooCommerce
- Пользовательский динамический расчет стоимости доставки в WooCommerce
- Программная установка пользовательских тарифов на доставку в WooCommerce 3
- Получите комиссию за заказ и суммы скидок для расчета общей суммы заказа в WooCommerce
Подробнее здесь: https://stackoverflow.com/questions/788 ... rates-prog