Không áp dụng giảm giá phiếu giảm giá cho các sản phẩm đặt hàng trước trong WooCommerce

Aug 15 2020

Tôi đang cố gắng chỉ áp dụng một phiếu giảm giá cho các sản phẩm còn hàng.

Vì vậy, nếu tôi có 5 sản phẩm trong giỏ hàng và 4 sản phẩm trong kho, chỉ 4 sản phẩm sẽ được giảm giá , các sản phẩm đặt hàng trước SẼ KHÔNG.

Trên thực tế, tôi đang cố gắng thay đổi get_items_to_apply_couponchức năng mặc định " " trong class-wc-discounts.phptệp "".

Tôi đã thử tính toán số lượng tồn kho của sản phẩm hiện tại bên trong bao bì foreach và sau đó tôi đã thay đổi $item_to_apply->quantitysự khác biệt giữa sản phẩm trong kho và sản phẩm giỏ hàng.

Nhưng cũng có thể nếu tôi đặt "200" bằng $ -> số lượng giảm giá sẽ không thay đổi .

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;
}

Trả lời

1 7uc1f3r Aug 15 2020 at 16:30

các class-wc-discounts.phpchứa

  • apply_coupon_percent - Áp dụng chiết khấu phần trăm cho các mặt hàng và trả lại một loạt các chiết khấu đã cấp.

Trong chức năng này, chúng tôi tìm thấy woocommerce_coupon_get_discount_amountmóc lọc.

Vì vậy, khi một sản phẩm được đặt hàng trước, bạn có thể trả về 0 dưới dạng giảm giá

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