Ich wollte eine kaufen 3 kostenlose 1 Funktion implementieren, so schrieb ich ein Skript, das erkennen, ob Kunde 3 gleiche Artikel im Warenkorb hat und automatisch 1 mehr gleichen Artikel in den Warenkorb hinzufügen. Dann einen anderen Haken verwenden, überschreiben ich den Preis des Produkts auf 0Warenkorb Produktpreis in Woocommerce ändern
gegoogelt ich die Lösung und verwendet den gleichen Ansatz gefunden auf:
- WooCommerce: Add product to cart with price override?
- woocommerce add custom price while add to cart
Hier das Codebeispiel:
function setGiftPriceToZero($cart_object){
foreach($cart_object->cart_contents as $k=>$item):
if(isset($item['variation']['promo']) && ($item['variation']['promo']) == 'buy 3 free 1'):
$item['data']->price = 0;
endif;
endforeach;
}
add_action('woocommerce_before_calculate_totals', 'setGiftPriceToZero');
Wenn Woo Handel berechnen die Zwischensumme für den Warenkorb, es immer im ursprünglichen Preis des Produkts hinzufügen, die frei sein soll. Zum Beispiel, als ich 3 $ 100 Artikel zum Warenkorb hinzugefügt habe, endet die Zwischensumme des Einkaufswagens mit $ 400 statt $ 300.
Ich graben tiefer in den Woocommerce-Code und festgestellt, dass in https://docs.woocommerce.com/wc-apidocs/source-class-WC_Cart.html#1139, $item['data']->get_price()
verwendet wird, die immer den ursprünglichen Preis für den Artikel zurückgeben.
Gibt es trotzdem eine Lösung mit hooks/apis, anstatt Woocommerce-Kerndatei zu bearbeiten?