In Woocommerce versuche ich einen Weg zu finden, einen 10% Rabatt auf die Bestellung eines ganzen Kunden anzuwenden, wenn das Gewicht im Einkaufswagen über 100 Pfund ist. Ich bin ein Teil davon, dies zu erreichen. Für den nächsten Schritt suche ich nach einer Möglichkeit, einen Gutscheincode über action/hook über functions.php programmatisch anzuwenden.Wie programmiere ich einen Gutschein in Woocommerce?
Es scheint, dass ich die Funktion woocommerce_ajax_apply_coupon verwenden kann, um dies zu tun (http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html), aber ich bin mir nicht sicher, wie man es benutzt.
Bis jetzt habe ich cart.php geändert, um das Gesamtgewicht aller Produkte im Warenkorb zu erhalten, ich habe einen Gutschein erstellt, der den Rabatt (wenn manuell eingegeben) anwendet, und ich habe Code zu Funktionen hinzugefügt .php, um das Gewicht zu überprüfen und dem Benutzer eine Nachricht anzuzeigen.
EDIT: Teilcode entfernt, abgeschlossen Code in Lösung unten enthalten.
Dank für die Führung Freney. Hier ist das Arbeitsende Ergebnis, das erfolgreich den Rabatt-Coupon gilt, wenn die Bedingung erfüllt ist und entfernt es auch, wenn es nicht mehr erfüllt ist:
/* Mod: 10% Discount for weight greater than 100 lbs
Works with code added to child theme: woocommerce/cart/cart.php lines 13 - 14: which gets $total_weight of cart:
global $total_weight;
$total_weight = $woocommerce->cart->cart_contents_weight;
*/
add_action('woocommerce_before_cart_table', 'discount_when_weight_greater_than_100');
function discount_when_weight_greater_than_100() {
global $woocommerce;
global $total_weight;
if($total_weight > 100) {
$coupon_code = '999';
if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
echo '<div class="woocommerce_message"><strong>Your order is over 100 lbs so a 10% Discount has been Applied!</strong> Your total order weight is <strong>' . $total_weight . '</strong> lbs.</div>';
}
}
/* Mod: Remove 10% Discount for weight less than or equal to 100 lbs */
add_action('woocommerce_before_cart_table', 'remove_coupon_if_weight_100_or_less');
function remove_coupon_if_weight_100_or_less() {
global $woocommerce;
global $total_weight;
if($total_weight <= 100) {
$coupon_code = '999';
$woocommerce->cart->get_applied_coupons();
if (!$woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {
$woocommerce->show_messages();
}
$woocommerce->cart->calculate_totals();
}
}
Da ich bereits einen Coupon im Backend habe: "999" habe ich nur den Code hinzugefügt, den Sie zum Anwenden des Coupons angegeben haben. Wenn ich jedoch zur Woocommerce-Cart-Seite gehe, bekomme ich jetzt den Fehler: Aufruf einer Member-Funktion add_discount() für ein Nicht-Objekt in [Pfad zu ...] functions.php in Zeile 65 [die if-Anweisung mit add_discount]. Ich habe den Code in meinem ursprünglichen Beitrag aktualisiert, um Ihnen zu zeigen, wie es aussieht. – msargenttrue
Versuchen Sie, 'global $ woocommerce;' zusammen mit Ihrer '$ total_weight' Zeile hinzuzufügen. – Freney
Danke, das hat funktioniert! So jetzt bin ich in der Lage, den Rabatt erfolgreich anzuwenden, aber jetzt bemerke ich ein anderes Problem ... Wenn der Benutzer einige Warenkorb-Artikel entfernt und der Einkaufswagen wieder auf 100 Pfund oder weniger geht, dann ist der Rabatt immer noch da. Ich suche nach einer Möglichkeit, den Rabatt zu entfernen, wenn der Einkaufswagen die Bedingung nicht mehr erfüllt, so dass Benutzer diesen Gutschein nicht nutzen können. Ich würde erwarten, dass es eine remove_discount Funktion gibt, die den umgekehrten Weg von add_discount darstellt, aber ich konnte keinen in der Woocommerce API-Dokumentation finden: http://docs.woothemes.com/wc-apidocs/ – msargenttrue