No aplique cupones de descuento en productos pendientes en WooCommerce

Aug 15 2020

Intento aplicar un cupón solo en productos que están en stock.

Entonces, si tengo 5 artículos en el carrito y 4 en stock, solo se aplicará el descuento en 4 , los productos en pedido pendiente NO.

En realidad, estoy tratando de cambiar la get_items_to_apply_couponfunción " " predeterminada en el class-wc-discounts.phparchivo " ".

Intenté calcular la cantidad de existencias del producto actual dentro de cada ciclo y luego cambié $item_to_apply->quantityla diferencia entre las existencias y los productos del carrito.

Pero también si pongo "200" en $ -> cantidad, el descuento no cambiará .

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

Respuestas

1 7uc1f3r Aug 15 2020 at 16:30

El class-wc-discounts.phpcontiene

  • apply_coupon_percent - Aplicar el porcentaje de descuento a los artículos y devolver una serie de descuentos concedidos.

En esta función encontramos el woocommerce_coupon_get_discount_amountgancho de filtro.

Por lo tanto, cuando un producto está en pedido pendiente, puede devolver 0 como descuento

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