Ne pas appliquer de réduction sur les produits en rupture de stock dans WooCommerce
J'essaie d'appliquer un coupon uniquement sur les produits en stock.
Donc, si j'ai 5 articles sur le panier et 4 en stock, seulement 4 auront la réduction appliquée , les produits en rupture de stock NE SERONT PAS.
En fait, j'essaye de changer la get_items_to_apply_coupon
fonction " " par défaut dans le class-wc-discounts.php
fichier " ".
J'ai essayé de calculer la quantité en stock du produit actuel à l'intérieur de chaque véhicule, puis j'ai changé $item_to_apply->quantity
la différence entre les produits en stock et les produits du panier.
Mais aussi si je mets "200" dans $ -> quantité, la remise ne changera pas .
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;
}
Réponses
Le class-wc-discounts.phpcontient
- apply_coupon_percent - Appliquer un pourcentage de réduction sur les articles et renvoyer une gamme de remises accordées.
Dans cette fonction, nous trouvons le woocommerce_coupon_get_discount_amountcrochet de filtre.
Ainsi, lorsqu'un produit est en rupture de stock, vous pouvez retourner 0 sous forme de remise
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 );