Unser Game Changer. Hier geht's zu unserer Videomarketing App...

Categories
Code-Schnipsel Code-Schnipsel WooCommerce News Wordpress

WooCommerce – Bestellungen nach PayPal Zahlung automatisch abschließen

Gehörst du auch zu denjenigen, die digitale Produkte in Ihrem WooCommerce Shop verkaufen, also Produkte, die nach dem Kauf und der erfolgten Bezahlung direkt herunter geladen werden können?

Dann hast du vielleicht oder deine Kunden auch das Problem, dass nach erfolgter Zahlung mit PayPal die Bestellung nicht automatisch abgeschlossen wird und der Käufer somit keine sofortige Möglichkeit bekommt, sein gekauftes Produkte herunter zu laden.

Ich jedenfalls hatte häufiger diese Schwierigkeit in meinen WooCommerce Shops bzw. in den WooCommerce Shops meiner Kunden. Daher habe ich nach einer Lösung gesucht, dies auf einfachem Wege selbst zu steuern. Diese Lösung, die mir seither sehr gute Dienste leistet, möchte ich euch nicht vorenthalten.

Hier also ein paar Codezeilen, die eure Bestellungen nach gewünschter Zahlungsart direkt als completed kennzeichnet. Die Zeilen kommen in die functions.php eures Themes. Bitte denkt daran, wenn nicht schon geschehen, ein Child-Theme einzurichten. Ansonsten lauft ihr Gefahr, dass eure Änderungen mit dem nächsten Update überschrieben werden. Wie immer erfolgt weiter unten eine kurze Erläuterung:

/**
 * bezahlte Bestellungen automatisch abschliessen
 */
add_action( 'woocommerce_thankyou', 'auto_complete_paid_order', 10, 1 );
function auto_complete_paid_order( $order_id ) {
  if ( ! $order_id ) {
    return;
  }

  global $woocommerce;
  $order = new WC_Order( $order_id );

  // kein Status Update fuer folgende Zahlungsarten
  if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cod' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cheque' ) ) {
    return;
  } 
  // "completed" fuer alle anderen Zahlungsarten
  else {
    $order->update_status( 'completed' );
  }
}

 

Um an der richtigen Stelle einzugreifen, nutze ich den Action-Hook woocommerce_thankyou. Die Bestellung ist eingegangen, die Bezahlung mittels PayPal ist erfolgt. Gibt es keine Bestellnummer ($order_id), ist irgendwas schief gelaufen und die Funktion wird nicht weiter verarbeitet (Zeilen 6-8).

Prüfung, welche Zahlungsart als erledigt gekennzeichnet werden soll

Jetzt kommt der entscheidende Schritt. Es wird die Zahlungsweise des Kunden geprüft und die Zahlungsarten abgefragt, die NICHT zu einem sofortigen Bestellabschluss führen sollen (Zeilen 13-16). Ist die Zahlweise des Kunden nicht darunter, geht es weiter in der Funktion und die WooCommerce Bestellung wird als completed gekennzeichnet (Zeile 19).

Ergänzend möchte ich noch hinzufügen, welche Zahlungarten ich ausgeschlossen habe:

  • Überweisung (bacs)
  • Zahlung per Scheck (cheque)
  • Nachnahme (cod)

Ich hoffe, die paar Zeilen helfen dem ein oder anderen und sparen Mühe und Zeit, die Bestellungen händisch "anfassen" zu müssen.

0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
25 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
sabrina
1 Jahr zuvor

Großartig, funktioniert immer noch. Vielen Dank!

Robin Gottschalk
Robin Gottschalk
3 Jahre zuvor

Hallo Ralf,
schon etwas her, aber deinen Code findet man immer noch – habe ihn heute entdeckt.
Ein – nehme ich an – schnell zu behebendes Problem:
Habe ein child theme erstellt und dann in die functions.php Datei dann einfach deinen Code untendran gehängt.
Jetzt taucht der bei mir auf jeder Website ganz oben auf – jede einzelne Codezeile – ich nehme an, ich muss den Code weiter oben einbetten? irgendwelche Sonderzeichen oder dergleichen?

Thomas
Thomas
3 Jahre zuvor

Hallo zusammen, suche genau so einen Code der Automatisiert die bestelleung auf Abgeschlossen stellt. Nur bekomme ich leider diese Fehler Meldung….. kann da einer helfen.
FEHLER: Fatal error: Cannot redeclare auto_complete_paid_order() (previously declared in /www/htdocs/w01a2c6c/EigeneTheme/wp-content/themes/deli/functions.php:39) in /www/htdocs/w01a2c6c/broetchenboten.de/wp-content/themes/storefront/functions.php on line 23

Danke im vorraus

Volker Seidler
4 Jahre zuvor

Hallo, der Code funktioniert soweit. Nun habe ich einen Shop, in dem sowohl virtuelle als auch „reale“ Artikel verkauft werden. Wenn nun alles auf fertig gesetzt wird, verliert man ein wenig den Überblick. Cool wäre eine Unterscheidung zwischen „virtuellem Artikel“ und „realem“ Artikel. Gäbe es da eine Möglichkeit, dies in den Code einzubauen?
Gruß Volker

Barney
Barney
5 Jahre zuvor

Hi Ralf,

ich greife deinen tollen Hinweis noch einmal auf. Statt allein mit PayPal funktioniert dein Snippet auch mit Klarna. Das einzige, was Probleme verursacht: Bei einer Bestellung geht keine E-Mail an den Bestellservice Admin raus, so kann nur im Backend von Woocommerce die Bestellung eingesehen und „erkannt“ werden.
Weißt du hier, woran das liegen könnte und hast du Rat? Danke dir

Sven Krautwald
Sven Krautwald
6 Jahre zuvor

Hallo, ich habe Ihren Code eingefügt.
Wenn im Bezahlprozess kurz vorm Bezahlen der Vorgang seitens des Kunden abgebrochen wird, wird das Produkt dennoch freigegeben.
DASS DARF SO NICHT SEIN.

Zudem erscheint der Fehlercode:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class ‚WC_GZD_Gateway_Direct_Debit‘ does not have a method ’set_mandate_seqType_to_RCUR_for_user‘ in /customers/4/8/c/DOMAIN.de/httpd.www/wp-includes/class-wp-hook.php on line 298

Winni
6 Jahre zuvor

Danke Ralf für den Code. Hat mir viel Zeit und Nerven gespart. Soweit ich das jetzt getestet habe, funktioniert das klasse. Danke dir!

Herzliche Grüße aus Karlsruhe, Winni

Norbert
Norbert
6 Jahre zuvor

Hallo zusammen!
Hatte das gleiche Problem. In den Einstellungen von WooCommerce Germanized war ein Haken bei
„Stornierungen verhindern – Stornierung von Bestellungen durch den Kunden verhindern.“
gesetzt (in den Einstellungen „Allgemein“, 6. Zeile).
Das war also der Haken, jetzt funktioniert alles. Danke euch allen, vor allem an Ralf für den Code!

Sandra
Sandra
6 Jahre zuvor

Hallo Ralf,
zunächst war alles super und ich habe mich sehr über diesen Code gefeut. Allerdings schließe ich mich jetzt leider Karsten an. Auch bei mir ist es so, dass wenn der Zahlungsvorgang von PayPal abgebrochen wurde, der Kunde die E-Mail inklusive Download-Link trotzdem erhält, obwohl er nicht gezahlt hat. Ich habe WooCommerce Germanized installiert. Könnte es eventuell auch daran liegen?

Viele Grüße
Sandra

Sandra
Sandra
6 Jahre zuvor
Reply to  Ralf

Hallo Ralf,

vielen Dank für deine Rückmeldung. Ich habe WooCommerce Germanized mal deaktviert und siehe da, dieses Plugin war die Ursache für die fehlerhafte Verarbeitung beim Zahlungsabbruch von PayPal. Leider benötigen wir aber zwingend dieses Plugin. Aktuell können wir deswegen leider nur manuell, bezahlte Bestellungen auf den Status „fertiggestellt“ markieren. Das ist ziemlich blöd. Ich bin mir nicht mal sicher ob das Problem jetzt erst nach dem Update des Plugins aufgetreten ist. Wir hatten rund 83 Bestellungen auf „in Bearbeitung“. Irgendwer hätte sich doch gemeldet, wenn er die Datei nach Zahlungseingang nicht downloaden hätte können. Deshalb gehe ich davon aus, dass in unserem Fall das Update die Ursache sein könnte.

Leider fehlen mir die Programmierkenntnisse, deinen Code so umzuschreiben, dass er auch mit WooCommerce Germanized funktioniert. 🙁

Hast du eine Idee?

Viele Grüße
Sandra

Sandra
Sandra
6 Jahre zuvor
Reply to  Ralf

Hallo Ralf,

jetzt funktioniert bei uns alles, wie gewünscht! 🙂

Schau mal hier, dann brauche ich nicht so viel tippen: https://wordpress.org/support/topic/bestellstatus-automatisch-fertigstellen-nach-paypal-zahlung/

Daniel
Daniel
7 Jahre zuvor

Ich habe den Code Kopiert und einfach ganz unten in die Theme functions kopiert dann hat die Website nicht mehr funktioniert Weiß jemand woran das liegen kann?

Gruß Daniel

Marc
Marc
3 Jahre zuvor
Reply to  Ralf

selbe Problem bei mir… -.-

David
7 Jahre zuvor

Stand ebenfalls vor diesem Problem, Bestellungen wurden nicht abgeschlossen und wurden weiter „in Bearbeitung“ geführt. Ist jetzt abgehackt, danke für diesen Beitrag.

Karsten
Karsten
7 Jahre zuvor

Hi, der Tipp ist interessant, aber hat eine Lücke: Wenn ich mich in Paypal einlogge und den Vorgang dann abbreche, wird die Email mit dem Downloadlink trotzdem rausgesendet 🙁

Ich habe im Moment auch das Problem, dass die erfolgte Zahlung von paypal nicht an WooCommerce übertragen wird. Ich muss es immer manuell machen und verstehe nicht, woran es liegen kann.
Dachte, dein Ansatz wäre eine Lösung, aber das ist nicht gut so. Wenn einer selbst aus versehen den Vorgang abbricht, freut er sich über kostenlose Ware

Evelyn Schneider
Evelyn Schneider
5 Jahre zuvor
Reply to  Ralf

Hallo Ralf,
erst vielen Dank für deine Hilfe, die du hier anbietest.
Ich muss sie jetzt leider auch in Anspruch nehmen. Ich arbeite das erste Mal mit WP und Woocommerce, also bitte Nachsicht, falls ich nicht gleich was verstehe.
Ich habe nun diesen Code Schnipsel in meine functions.php vom theme eingetragen. Wenn ich dann über die Sandbox meinen Testkauf tätige, werde ich dann automatisch zurück zum Händler (in dem Fall ich ja selber) geleitet und lande auf meiner Bestätigungsseite vom Shop. Auf ihr ist alles aufgelistet u.a. auch der Download Link.
Tätige ich aber eine 2. Testkauf, wird der Downloadlink plötzlich nicht mehr mitgesendet.
Bin nun langsam mit meinem Latein am Ende. 🙂
Und bevor das nicht klappt, brauche ich auch nicht weiter den Shop aufzubauen, denn im Moment habe ich nur einen wirklichen Artikel drin.
Bin für jede Hilfe dankbar.
lg Evelyn

25
0
Would love your thoughts, please comment.x