WooCommerce에서 이월 주문 제품에 쿠폰 할인을 적용하지 마십시오.

Aug 15 2020

재고가있는 상품에만 쿠폰을 적용하려고합니다.

따라서 장바구니에 5 개 항목이 있고 재고가 4 개있는 경우 4 개만 할인이 적용 되며 이월 주문 제품은 적용 되지 않습니다.

실제로 get_items_to_apply_coupon" class-wc-discounts.php"파일 의 기본 " "기능 을 변경하려고 합니다.

foreach cicle 안에있는 현재 제품의 재고 수량을 계산 해본 다음 $item_to_apply->quantity재고와 장바구니 제품의 차이로 변경했습니다 .

하지만 $-> 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;
}

답변

1 7uc1f3r Aug 15 2020 at 16:30

는 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 );