Unbezahlte Überweisungsbestellungen
Die WooCommerce-eigene Einstellung Lagerbestand zurückhalten (Minuten) storniert nur Bestellungen, die in Zahlung ausstehend liegen bleiben. Eine Überweisung (BACS) setzt die Bestellung auf In Wartestellung, dieser Timer greift dort also nie, und eine unbezahlte Überweisung kann das letzte Stück unbegrenzt blockieren. Dieses Modul schließt die Lücke.
Vorgeschlagen von 5trid3rr in wppoland/polski#74.
Konfiguration
Abschnitt betitelt „Konfiguration“Gehen Sie zu Polski > Module und aktivieren Sie Unpaid bank transfer
orders (Modulschlüssel unpaid_orders) in der Gruppe „Checkout and Orders”.
| Einstellung | Beschreibung | Standard |
|---|---|---|
| Betroffene Zahlungsarten | Gateway-Ids, durch Komma getrennt | bacs |
| Zahlungserinnerung senden | Ob die Erinnerungsstufe überhaupt läuft | Ja |
| Erinnern nach, Stunden ab Bestelldatum | Erste Uhr | 24 |
| Bestellung stornieren, wenn sie unbezahlt bleibt | Ob die Stornostufe überhaupt läuft | Ja |
| Stornieren nach, Stunden ab Bestelldatum | Zweite Uhr | 48 |
Beide Uhren laufen ab dem Bestelldatum, nicht ab dem Moment, in dem die Bestellung In Wartestellung ging. Eine Bestellung kann diesen Status mehrfach erreichen, und die Frist der Kundschaft soll dabei nicht neu beginnen.
- Die Kundschaft bestellt und wählt Überweisung. WooCommerce setzt die Bestellung auf In Wartestellung und bucht den Bestand ab.
- Ist die Bestellung nach dem Erinnerungsfenster weiterhin unbezahlt, geht eine Zahlungserinnerung raus und eine Bestellnotiz hält das fest. Einmalig.
- Ist sie nach dem Stornofenster weiterhin unbezahlt, wird die Kundschaft über die Stornierung informiert und der Status wechselt auf Storniert, wodurch der Bestand wieder frei wird.
- Trifft die Zahlung vorher ein, passiert keiner der beiden Schritte.
Eine Bestellung, die beim ersten Einschalten des Moduls bereits über dem Stornofenster liegt, wird direkt storniert. Sie erhält keine Zahlungsaufforderung, der im selben Lauf die Stornierung folgt.
Was das Modul nicht anfasst
Abschnitt betitelt „Was das Modul nicht anfasst“Jede Bestellung wird unmittelbar vor der Aktion erneut geladen und geprüft, denn zwischen Abfrage und Aktion kann der Shop die Zahlung erhalten haben. Das Modul lässt eine Bestellung in Ruhe, sobald eines davon zutrifft:
- der Status ist nicht mehr In Wartestellung
- die Zahlungsart gehört nicht mehr zu den konfigurierten
- WooCommerce hält sie für bezahlt oder sie hat ein Zahlungsdatum
- es wurde eine Rechnung dazu ausgestellt
- es liegt ein Widerruf dazu vor
- es existiert eine Rücksendeanfrage dazu
Die letzten drei gibt es, weil eine Stornierung unter einem Dokument oder einem Verbraucheranspruch Papiere hinterlässt, die auf eine Bestellung zeigen, die es nicht mehr gibt.
Die E-Mails
Abschnitt betitelt „Die E-Mails“Beide E-Mails sind normale WooCommerce-E-Mails. Betreff, Überschrift, Zusatztext und den Schalter bearbeiten Sie unter WooCommerce > Einstellungen > E-Mails:
- Unpaid order reminder
- Unpaid order cancelled
Die Templates lassen sich wie bei jeder WooCommerce-E-Mail im Theme
überschreiben, aus polski-pro/templates/emails/.
Zeitplanung
Abschnitt betitelt „Zeitplanung“Das Modul läuft stündlich über WP-Cron (polski_unpaid_orders_cron) und
verarbeitet bis zu 50 Bestellungen pro Lauf, ein größerer Rückstand wird also
über mehrere Läufe abgearbeitet statt in einen Timeout zu laufen. Wird das Modul
abgeschaltet, wird das Ereignis wieder ausgetragen.
| Hook | Typ | Beschreibung |
|---|---|---|
polski/unpaid_order/reminder |
Action | Feuert mit der Bestell-Id, wenn eine Erinnerung rausgeht |
polski/unpaid_order/cancelled |
Action | Feuert mit der Bestell-Id kurz vor dem Statuswechsel |
polski/unpaid_order/actionable |
Filter | false zurückgeben, um eine einzelne Bestellung zu schützen |
// Bestellungen über 1000 PLN nie automatisch stornieren, die von Hand verfolgen.add_filter('polski/unpaid_order/actionable', function (bool $ok, WC_Order $order): bool { return $order->get_total() > 1000 ? false : $ok;}, 10, 2);