Non applicare coupon di sconto sui prodotti in arretrato in WooCommerce
Sto cercando di applicare un coupon solo sui prodotti che sono in stock.
Quindi, se ho 5 articoli nel carrello e 4 in stock, solo 4 avranno lo sconto applicato , i prodotti in arretrato NON LO FARANNO.
In realtà sto cercando di cambiare la get_items_to_apply_coupon
funzione " " predefinita nel class-wc-discounts.php
file " ".
Ho provato a calcolare la quantità di stock del prodotto corrente all'interno di ciascun ciclo e poi ho modificato $item_to_apply->quantity
la differenza tra prodotti in stock e prodotti a carrello.
Ma anche se metto "200" in $ -> quantità lo sconto non cambierà .
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;
}
Risposte
Il class-wc-discounts.phpcontiene
- apply_coupon_percent - Applica una percentuale di sconto agli articoli e restituisci una serie di sconti concessi.
In questa funzione troviamo il woocommerce_coupon_get_discount_amountfiltro hook.
Quindi, quando un prodotto è in arretrato, puoi restituire 0 come sconto
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 );