Не применяйте купонную скидку на товары с невыполненным заказом в WooCommerce
Я пытаюсь применить купон только на товары, которые есть в наличии.
Таким образом, если у меня 5 товаров в корзине и 4 товара в наличии, скидка будет применяться только к 4 товарам, а товары по невыполненному заказу НЕ БУДУТ.
На самом деле я пытаюсь изменить " get_items_to_apply_coupon
" функцию по умолчанию в " class-wc-discounts.php
" файле.
Я попытался вычислить количество текущего продукта на складе внутри каждого цикла, а затем изменил $item_to_apply->quantity
значение на разницу между продуктами на складе и в корзине.
Но также, если я поставлю «200» в $ -> количество, скидка не изменится .
protected function get_items_to_apply_coupon( $coupon ) { $items_to_apply = array();
foreach ( $this->get_items_to_validate() as $item ) {
$item_to_apply = clone $item; // Clone the item so changes to this item do not affect the originals.
if ( 0 === $this->get_discounted_price_in_cents( $item_to_apply ) || 0 >= $item_to_apply->quantity ) { continue; } if ( ! $coupon->is_valid_for_product( $item_to_apply->product, $item_to_apply->object ) && ! $coupon->is_valid_for_cart() ) { continue; } $items_to_apply[] = $item_to_apply; } return $items_to_apply;
}
Ответы
class-wc-discounts.phpсодержит
- apply_coupon_percent - Применяйте процентную скидку к товарам и возвращайте множество предоставленных скидок.
В этой функции мы находим woocommerce_coupon_get_discount_amountкрючок фильтра.
Поэтому, когда товар находится в отставке, вы можете вернуть 0 в качестве скидки.
function filter_woocommerce_coupon_get_discount_amount( $discount, $price_to_discount , $cart_item, $single, $coupon ) { // On backorder if ( $cart_item['data']->is_on_backorder() ) {
$discount = 0; } return $discount;
}
add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );