2016-11-23 5 views
0

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:

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?

Antwort

0

Ich habe den Schuldigen dieses Fehlers gefunden. Es wird durch einen Konflikt von einem anderen Plugin namens Woocommerce Role Based Price verursacht. Dieses Plugin überschreibt den Warenkorb-Artikelpreis am Ende des Einkaufswagen-Gesamt-Berechnungsflusses. Deshalb geben get_price() Funktion immer den angegebenen Preis für den Artikel zurück.

Jetzt muss ich nur die Plugin-Datei bearbeiten, so dass es gut mit meiner Logik spielt.

Verwandte Themen