So schließen Sie WooCommerce-Bestellungen automatisch ab, wenn sie in den Verarbeitungsstatus wechseln
Veröffentlicht: 2019-04-06Jede E-Commerce-Website erfordert die Nachverfolgung und Verwaltung von Bestellungen, was für den Administrator eine ziemlich entmutigende Aufgabe sein kann, wenn man bedenkt, wie viele Bestellungen eine durchschnittliche E-Commerce-Website mit hohem Datenverkehr pro Tag erhält. Wenn es um WooCommerce geht, wird eine Bestellung erstellt, sobald der Checkout-Prozess abgeschlossen ist (siehe unten den Ablauf der WooCommerce-Bestellung).
Je nachdem, wo sich die Bestellung in der Kette von der Zahlung bis zur Lieferung befindet, wird ihr ein Status zugewiesen. Diese Status werden von WooCommerce, dem Payment Gateway und dem Shop-Inhaber/Administrator gesetzt und/oder geändert, je nachdem, wo sich die Bestellung befindet.
Bevor wir uns den Bestellfluss in WooCommerce ansehen, wollen wir zum Nutzen der Neulinge definieren, welcher Bestellstatus in WooCommerce ist.
Was ist der Bestellstatus in WooCommerce?
Der Bestellstatus ist eine Darstellung des aktuellen Standes, in dem sich eine vom Kunden getätigte Bestellung befindet . Der Bestellstatus in Woocommerce ändert sich, wenn die Bestellung bis zur Lieferphase oder Rückerstattung bearbeitet wird, falls ein Problem mit dem Produkt/den Dienstleistungen vorliegt und der Ladenbesitzer einer Rückerstattung an den Kunden zugestimmt hat. Wenn ein Kunde beispielsweise eine Bestellung für ein bestimmtes Produkt aufgibt, wird sofort der nächste Bestellstatus in der Reihenfolge festgelegt, nämlich „Zahlung ausstehend“. Die ausstehende Zahlung ist in Woocommerce standardmäßig eingestellt.
Werfen wir nun zum besseren Verständnis einen Blick auf das Flussdiagramm.
Woocommerce-Bestellstatus-Flussdiagramm

Wie dargestellt, wird der Status einer Bestellung, nachdem die Zahlung für eine Bestellung erfolgreich abgeschlossen wurde, auf „In Bearbeitung“ gesetzt, bis der Ladenbesitzer ihn manuell auf „Abgeschlossen“ ändert. Dies ist eine Overhead-Aufgabe für den Ladenbesitzer oder den Administrator, insbesondere in Fällen, in denen das Verkaufsvolumen hoch ist. Eine Möglichkeit, diesen Prozess effizient zu gestalten, besteht darin, WooCommerce-Bestellungen automatisch abzuschließen, wenn sie in den Verarbeitungsstatus wechseln. Mal sehen, wie wir das mit dem Code-Snippet machen können.
Vollständige Liste des Bestellstatus in WooCommerce
- Ausstehende Zahlung: Dies wird standardmäßig angezeigt, wenn die Bestellung aufgegeben wurde, aber keine Zahlung erfolgt ist.
- Fehlgeschlagen: Dies zeigt an, dass die Zahlung nicht durchgegangen ist und abgelehnt wurde.
- Verarbeitung: Dies zeigt an, dass die Zahlung durchgegangen ist und von den Geschäftsinhabern empfangen wurde und nun für den Versand und die Lieferung verarbeitet werden kann.
- Abgeschlossen: Dies zeigt an, dass alles gut gelaufen ist und die Bestellung nun erfüllt und abgeschlossen wurde.
- Zurückgestellt : Dies zeigt einen Zustand an, in dem die Bestellung eine Bestätigung durch den Geschäftsinhaber erfordert.
- Storniert : Ein Bestellstatus „Storniert“ erfordert keine weiteren Maßnahmen. Die Kündigung kann entweder vom Admin oder vom Kunden irgendwann erfolgen.
- Zurückerstattet: Die Bestellung wurde zurückerstattet, es sind keine weiteren Maßnahmen erforderlich
Nachdem wir nun besser verstehen, was der Bestellstatus ist und welche Funktion er hat, sehen wir uns an, warum es eine gute Idee sein kann, ihn zu aktualisieren.
Setzen Sie den WooCommerce-Bestellstatus basierend auf der Zahlungsmethode automatisch auf Abgeschlossen
In den meisten Fällen müssten Sie dies erst nach erfolgreicher Zahlung tun, und dies ist nur möglich, wenn der Benutzer die Option Nachnahme nicht ausgewählt hat. Wenn der folgende Code in die Datei functions.php Ihres Child-Themes eingefügt wird, wird der Status der Bestellung automatisch auf Abgeschlossen gesetzt, sobald eine Zahlung erfolgreich durchgeführt wurde. Daher ändert sich der Bestellstatus in allen Fällen, außer wenn der Benutzer die Option Nachnahme auswählt, automatisch auf Abgeschlossen.
add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method'); Funktion ts_auto_complete_by_payment_method($order_id) { if ( ! $order_id ) { Rückkehr; } globales $Produkt; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'in Bearbeitung') { $payment_method=$order->get_payment_method(); if ($payment_method!="cod") { $order->update_status( 'abgeschlossen' ); } } }

Hier verwenden Sie den Hook woocommerce_order_status_changed , um eine Funktion aufzurufen, wenn sich der Status einer Bestellung ändert. Nach Prüfung, ob die Bestellung den Status In Bearbeitung hat, wird der Bestellstatus nur dann auf Abgeschlossen geändert, wenn die Zahlungsart nicht Nachnahme ist. WooCommerce hat vier Standardzahlungsmethoden, nämlich. Direkte Banküberweisung (bacs), Scheckzahlungen (Scheck), Nachnahme (cod) und PayPal (paypal). Je nachdem, für welche Zahlungsmethode Sie die Bedingung angeben, müssen Sie die entsprechende ID verwenden, z. B. „bacs“, „cheque“, „cod“, „paypal“.
Setzen Sie den WooCommerce-Bestellstatus für virtuelle Produkte automatisch auf Abgeschlossen
Ein weiterer Fall, in dem Sie möchten, dass der Bestellstatus automatisch abgeschlossen wird, ist, wenn das Produkt oder die Produkte in der Bestellung virtuelle Produkte sind. Virtuelle Produkte sind Produkte, die entweder nicht greifbar oder herunterladbar sind. Ein Beispiel hierfür wäre ein Abonnement oder ein Gutschein für eine Ladenmitgliedschaft, der denjenigen, die das Abonnement gekauft haben, Rabatte bietet.

Ein Abonnement für eine Ladenmitgliedschaft hat möglicherweise keine konkrete Form, sondern ein Ablaufdatum. Herunterladbare Produkte wie Software oder sogar elektronische Kinokarten sind ebenfalls virtuelle Produkte, da sie keine Offline-Präsenz oder -Form haben. Bei den meisten virtuellen Produkten gibt es nie die Option „Nachnahme“. Zahlungen erfolgen vor Ort, und daher wäre es sicher, die Bedingung zur Überprüfung der verwendeten Zahlungsmethoden nicht aufzunehmen, sondern stattdessen nur eine Bedingung hinzuzufügen, um zu überprüfen, ob alle Produkte in der Bestellung virtuelle Produkte sind.
add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual'); Funktion ts_auto_complete_virtual($order_id) { if ( ! $order_id ) { Rückkehr; } globales $Produkt; $order = wc_get_order( $order_id ); if ($order->data['status'] == 'in Bearbeitung') { $virtuelle_bestellung = null; if (count($order->get_items()) > 0) { foreach( $order->get_items() as $item ) { if ( 'line_item' == $item['type'] ) { $_product = $order->get_product_from_item( $artikel); if ( ! $_product->is_virtual() ) { // Wenn wir ein nicht virtuelles Produkt finden, brechen Sie aus der Schleife aus $virtuelle_bestellung = falsch; Unterbrechung; } anders { $virtuelle_bestellung = wahr; } } } } // Wenn alle virtuelle Produkte sind, als abgeschlossen markieren if ($virtuelle_bestellung) { $order->update_status( 'abgeschlossen' ); } } }
Hier verwenden wir denselben Hook, um unsere Funktion ts_auto_complete_virtual aufzurufen . Nachdem Sie überprüft haben, ob sich die Bestellung im Bearbeitungsstatus befindet, müssen Sie jeden Artikel in der Bestellung durchgehen, um festzustellen, ob es sich um ein virtuelles Produkt handelt.
Fazit
Eine typische Woocommerce-Bestellung ist mit vielen Artikeln wie Produkten, Versand, Gebühren usw. verbunden. Hier bezieht sich line_item auf das Produkt. Es müssen nur die Produkte einzeln abgerufen werden, um zu prüfen, ob sie virtuell sind. Wenn auch nur ein Artikel kein virtuelles Produkt ist, wird der Status der Bestellung nicht als Abgeschlossen markiert.
Abhängig von Ihren Anforderungen und unter Verwendung des ersten Code-Snippets in diesem Beitrag können Sie jedoch weitere Bedingungen hinzufügen, um den Bestellstatus als abgeschlossen zu markieren. Wenn Sie beispielsweise den Bestellstatus auch für nicht virtuelle Produkte als abgeschlossen markieren möchten (wenn die Zahlung für diese Produkte erfolgt ist), können Sie dies tun, indem Sie ein Häkchen für die Zahlungsmethode hinzufügen, nachdem geprüft wurde, ob es sich um eine virtuelle handelt Produkt. Durch dieses Code-Snippet wird der Status der Bestellung jedoch nur dann auf Abgeschlossen gesetzt, wenn alle Produkte in der Bestellung virtuelle Produkte sind.