✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

So fügen Sie WooCommerce Checkout programmatisch einen benutzerdefinierten Rabatt hinzu

59

In diesem Beitrag sehen wir uns an, wie wir Rabatte programmatisch und automatisch hinzufügen. Dazu verwenden wir die Coupon-Funktion von WooCommerce, aber wir machen es automatisch, und wir verbergen die Tatsache, dass es sich um einen Coupon für die Kunden handelt. Ich habe versucht, den Code so allgemein wie möglich zu halten, da die Bedingungen für die Anwendung von Rabatten für jeden, der dies liest, sehr unterschiedlich sein können.

Warum Coupons der richtige Weg sind

In älteren Versionen von WooCommerce hatten wir ein paar („hackige”) Optionen, um Rabatte mit Code hinzuzufügen; zum Beispiel das Angeben einer negativen Zahl an add_fee()oder das Arbeiten mit get_discounted_price(). Leider funktionieren diese Methoden nicht mehr oder gelten als veraltet und werden in späteren Versionen entfernt. Der strukturell gute Weg, Rabatte hinzuzufügen, ist die Verwendung der integrierten Coupon-Funktionalität in WooCommerce.

Ein Gutschein kann jedoch im Allgemeinen nicht automatisch auf einen Einkaufswagen angewendet werden. Der Kunde muss manuell einen Gutscheincode eingeben, den er oder sie erhalten haben muss. In einigen Webshops möchten Sie einfach, dass ein Rabatt automatisch angewendet wird, wenn eine bestimmte Bedingung erfüllt ist, ohne dass der Kunde etwas tun muss. Das werden wir mit Code beheben.

Benutzerdefinierte Rabatte mit Coupons

Sie müssen einen Gutschein mit einem Code erstellen und ihn mit den gewünschten Parametern einrichten. Sie können ihn anwenden, entfernen und verschiedene Ausgaben ändern, wo immer der Gutschein für den Kunden sichtbar ist. Wenn Sie nicht möchten, dass Gutscheine für Kunden in Ihrem Webshop verfügbar sind, sehen wir uns optional einige einfache Tricks an, um die Optionen für die manuelle Eingabe von Gutscheincodes auszublenden.

Im folgenden Codebeispiel gruppiere ich den gesamten zugehörigen Code in einer PHP-Klasse. Dies hilft für einen saubereren Code, ist aber besonders nützlich, da wir mehrmals auf den Gutscheincode verweisen möchten. Es ist besser, es als Klassenvariable zu definieren, als es in mehreren Funktionen zu wiederholen.

Erstellen Sie Ihren Rabatt als Gutschein

Der erste Schritt besteht darin, den Coupon zu erstellen, der als „Platzhalter” für Ihren Rabatt dient. Am einfachsten ist es, einfach einen im WooCommerce-Adminbereich zu erstellen (WooCommerce > Coupons > Coupon hinzufügen).

Wenn Sie den Coupon programmatisch erstellen möchten, ist ein Coupon eigentlich ein Post, mit dem Sie erstellen können wp_insert_post()– aber Sie müssen darauf achten, Ihren Coupon-Post nur einmal zu erstellen. WooCommerce hat eine kurze Anleitung, wie man einen Gutschein programmatisch erstellt.

Geben Sie einen eindeutigen Slug als Ihren Gutscheincode an und legen Sie als Minimum den Rabattbetrag fest (entweder einen Prozentsatz oder eine feste Gebühr). Wie für das Codebeispiel unten habe ich einen Gutscheincode ‘ example‘ erstellt (ich empfehle jedoch, einen kreativeren und passenderen Namen für Ihren zu verwenden).

Erstellen der PHP-Klasse, die unseren gesamten Code enthalten wird

Kommen wir endlich zur Codierung! Sie können diese Klasse direkt im, Plugin-Code Ihres functions.phpDesigns oder in einer enthaltenen separaten Datei definieren.

class AWPCustomDiscount { private $coupon_code = 'example';   public function __construct() {   } } new AWPCustomDiscount();

Benennen Sie Ihre Klasse beliebig und ersetzen Sie die Klassenvariable durch den $coupon_codeNamen Ihres Gutscheins. Vergessen Sie nicht, die Klasse nach am Ende zu initialisieren (new AWPCustomDiscount()).

Wenn Sie schon einmal objektorientiert programmiert haben, sollte Ihnen das bekannt sein. Wenn nicht, keine Sorge, dies sollte einfach zu befolgen sein. Wir fügen hier einige Funktionen hinzu und verweisen mit auf den Gutscheincode $this->coupon_code. Beginnen wir mit dem Code, der dafür verantwortlich ist, den Gutschein tatsächlich hinzuzufügen, wenn die Bedingungen erfüllt sind.

Coupon programmgesteuert anwenden

Aus Erfahrung habe ich gelernt, dass das Einhaken des Codes zum Anwenden und Entfernen von Coupons am besten und konsistentesten funktioniert, wenn die folgenden zwei Hooks verwendet werden; eine für den Einkaufswagen (woocommerce_before_cart) und eine für die Kasse (woocommerce_before_checkout_form).

Innerhalb der Funktion müssen wir nur nach den gewünschten Bedingungen suchen. WooCommerce bietet Funktionen zum Abrufen des Warenkorbobjekts, mit with WC()->cartdenen wir alle Informationen erhalten können, die wir über den Warenkorb benötigen, z. B. seine Artikel und Gesamtsummen. Als Beispiel wird mit dem unten stehenden Code ein Rabatt gewährt, wenn die Gesamtsumme des Warenkorbs (ohne Rabatte) über einem bestimmten Betrag liegt.

Wir sollten auch sicherstellen, dass wir den Rabatt entfernen, wenn die Bedingungen nicht erfüllt sind, falls er zuvor hinzugefügt wurde. Stellen Sie sich in unserem Beispiel vor, der Kunde hat die maximale Menge überschritten, ist dann aber zum Warenkorb gegangen, hat einige Artikel entfernt und ist so wieder unter die erforderliche Menge gekommen. Da Gutscheine nicht automatisch angewendet werden, müssen alle angewendeten Gutscheine ebenfalls programmatisch entfernt werden.

Verwendenapply_coupon

Gutscheine werden mit dem Gutscheincode als Parameter zum Einkaufswagenobjekt hinzugefügt und mit apply_coupon()dem Gutscheincode als Parameter aus dem Einkaufswagenobjekt entfernt remove_coupon(). Einfach genug. Wir können auch die so treffend benannte Funktion get_applied_coupons()im Warenkorb-Objekt verwenden, um zu überprüfen, ob unser Gutschein bereits eingelöst wurde.

Wenn Sie mit der Verwendung von objektorientiertem PHP in WordPress nicht vertraut sind; Hier ist eine kurze Zusammenfassung, wie das obige funktioniert: Die __construct()Funktion wird immer dann ausgeführt, wenn die Klasse initialisiert wird, was wir direkt nach der Klasse tun. Im Inneren __construct()fügen Sie normalerweise alle Haken hinzu, wie Sie es normalerweise zum Beispiel im Inneren tun würden functions.php. Damit WordPress unsere Funktionen innerhalb unserer Klasse finden kann, müssen wir dem Hook mitteilen, dass er auf eine Funktion verweisen soll, die in einem Array definiert ist, das aus $this(dem Klassenobjekt) und dem Funktionsnamen besteht.

Innerhalb der Funktion addDiscount()programmieren wir unsere Bedingungen ein. Im obigen Beispiel rufe ich die Gesamtnutzung des Warenkorbs ab WC()->cart->get_subtotal()und vergleiche sie mit meinen Bedingungen – über 500.

Hinweis: Wenn Sie Warenkorbsummen abrufen und vergleichen müssen, beachten Sie, dass die meisten Summen Coupons enthalten. Zum Beispiel WC()->cart->get_cart_contents_total()geben die Vertrauteren den Gesamtbetrag vor dem Versand zurück, aber enthaltene Rabatte; Das heißt, wenn Ihr Rabatt bereits angewendet wurde, ist dieser Gesamtbetrag beim Vergleich falsch.

Sie können aufrufen apply_coupon(), ohne zu überprüfen, ob der Gutschein bereits angewendet wurde (die ifÜberprüfung in Zeile 14), da die Funktion apply_coupon()selbst sicherstellt, dass er nicht erneut hinzugefügt wird, wenn er zuvor angewendet wurde. Dieser if-Check verhindert jedoch, dass der Kunde bei jeder Aktualisierung des Warenkorbs die Fehlermeldung „Der Gutschein wurde bereits eingelöst” erhält.

So erscheint Ihr Rabatt in den Warenkorbsummen im Warenkorb und an der Kasse:

So fügen Sie WooCommerce Checkout programmatisch einen benutzerdefinierten Rabatt hinzu

Ihre Rabattbedingungen

Die Bedingungen für Ihren Gutschein hängen ganz von Ihnen und Ihren Bedürfnissen ab. Ich habe einige Beispielbedingungen für das Hinzufügen einer benutzerdefinierten Gebühr in einem früheren Beitrag eingerichtet – zum Beispiel abhängig vom Versandort oder welche Produkte sich im Warenkorb befinden. Sie können auch das heutige Datum vergleichen, wenn Sie einen speziellen Weihnachts- oder Halloween-Rabatt gewähren möchten, oder einen Rabatt basierend auf Konditionen beim eingeloggten Kunden gewähren.

Wenn Sie den Gutschein lieber in Abhängigkeit von den Einstellungen anwenden möchten, die Sie auf dem Gutschein selbst festgelegt haben – zum Beispiel bestimmte Produkt-IDs ausschließen oder einschließen, können Sie dies auch tun. Sie können ein Objekt des Gutscheins aus dem Gutscheincode wie folgt instanziieren:

Mit diesem Coupon-Objekt haben Sie Zugriff auf alle Funktionen zum Abrufen aller Einstellungen, die Sie für den Coupon festgelegt haben. Zum Beispiel, um Produkt-IDs zu erhalten, die für den Gutschein enthalten sein müssen:

Sehen Sie in der Dokumentation für die Klasse WC_Coupon nach, um zu sehen, wie Sie das bekommen, was Sie brauchen.

Korrigieren Sie das sichtbare Etikett des Gutscheins

Der Coupon sollte jetzt hinzugefügt und entfernt werden, wenn Ihr Einkaufswagen die in festgelegten Bedingungen erfüllt oder nicht erfüllt addDiscount(). In der Summentabelle im Warenkorb und an der Kasse wird der Rabatt jedoch als „Gutschein: Beispiel” (oder wie auch immer Ihr Gutscheincode lautet) angezeigt. Das ist nicht gut! Glücklicherweise ist es einfach, dieses Etikett zu ändern, indem Sie den Filter verwenden woocommerce_cart_totals_coupon_label. Wir fügen den Filter zu unserem hinzu __construct()und definieren eine Funktion:

Mit dem Filter erhalten wir als zweiten Parameter Zugriff auf das Coupon-Objekt. Mit dem Coupon-Objekt können wir seine Eigenschaft überprüfen code, ob es mit unserem benutzerdefinierten Coupon-Code übereinstimmt oder nicht. In diesem Fall senden wir das gewünschte Etikett zurück. Passen Sie die Etikettenausgabe Ihren Wünschen an. Andernfalls geben wir das Standard-Gutscheinetikett zurück.

Entfernen Sie die Benutzeroption, um den Rabatt zu entfernen

Eine andere Sache, die Ihnen vielleicht bei der Anzeige unseres Rabatts im Warenkorb und an der Kasse aufgefallen ist, ist, dass hinter seinem Betrag ein Link „[Entfernen]” steht. Dies ist das Standardverhalten von Coupons in WooCommerce, aber für unseren Fall nicht wünschenswert. Sowohl, weil es die Kunden verwirren könnte, als auch, weil unser Code es nach dem Entfernen erneut anwenden würde.

WooCommerce stellt den Filter woocommerce_cart_totals_coupon_htmlfür die Ausgabe des Betrags zur Verfügung. Glücklicherweise liefert WooCommerce die HTML-Ausgabe nur des Betrags selbst als dritten Parameter für diesen Filter. Wir können dies einfach zurückgeben, anstatt sicherzustellen, dass unser Rabatt mit Währung und allem korrekt dargestellt wird.

Optional: Ausblenden der Coupon-Funktion für Kunden

Gutscheine müssen in WooCommerce aktiviert werden, damit unsere Rabattfunktion funktioniert, aber beachten Sie, dass dies die Option für Kunden hinzufügt, Gutscheincodes sowohl im Warenkorb als auch an der Kasse manuell einzugeben. Wenn Sie nicht zeigen möchten, dass Ihr Webshop über eine Gutscheinfunktion verfügt, und insbesondere Kunden die manuelle Eingabe von Gutscheincodes verbieten möchten, können Sie dies auch tun.

Aus der Kasse entfernen

Das Entfernen der Gutscheinfunktion aus der Kasse ist einfach und kann in unserer Klasse durchgeführt werden. Wir entfernen einfach den Haken, der die Gutschein-„Box” darstellt, wie folgt:

... public function __construct() { add_action('woocommerce_before_cart', [$this, 'addDiscount']); add_action('woocommerce_before_checkout_form', [$this, 'addDiscount']); add_filter('woocommerce_cart_totals_coupon_label', [$this, 'discountLabel'], 10, 2); add_filter('woocommerce_cart_totals_coupon_html', [$this, 'discountHtml'], 10, 3); remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10); } ...

Aus dem Einkaufswagen entfernen

Das Entfernen der Gutscheincode-Funktion im Warenkorb ist leider nicht so einfach, da dies in einer Vorlage fest codiert ist. Sie müssen die Warenkorbvorlage von WooCommerce überschreiben, um die Coupon-Funktion zu entfernen. Kopieren Sie die Datei pluginswoocommercetemplatescartcart.phpin your-themewoocommercecartcart.php.

Die Vorlagendateien von WooCommerce ändern sich ständig, daher würde es nicht helfen, Ihnen eine genaue Zeilennummer zu geben. Aber Sie finden den Code, der die Eingabe und die Schaltfläche für den Coupon ausgibt, ganz unten in der Datei; sieht in etwa so aus:

Sie müssen lediglich die gutscheinbezogene Ausgabe auskommentieren. Ich empfehle, einen PHP-Kommentar mit /*direkt vor dem if-check hinzuzufügen und ihn mit */direkt nach der schließenden Klammer zu schließen. So:

An dieser Stelle sollte die Gutscheinfunktion Ihres Webshops für Kunden praktisch ausgeblendet werden! Aber Ihr benutzerdefinierter Rabatt sollte einwandfrei funktionieren.

Aufnahmequelle: awhitepixel.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen