We have setup a Woocommerce shop with different payment methods (stripe, Klarna, PayPal).

When the customer clicks on the final button for the order, the order is being generated in woo. Then an external window opens, where the customer handles all the payment things.

If the customer exits this process without paying, we have a hanging orders.

Is there a way (or a plugin) to have it the other way round? So an order should only be created when the payment is truly done.

thanks and best wishes, E.


I would normally make this a comment but I believe it warrants an answer.

You should not circumvent the order process of WooCommerce because the order itself represent the state of the order and its transaction regardless of whether the transaction (payment) fails or succeeds.

You need to consider:

  • what happens if the payment succeeds but the order fails?

Now you have payment (someone else's money) but no order data. If you're looking to increase your charge-back rate, that's a good way to go about it.

  • What happens if the payment fails? Should the order fail to and not be stored?

You are essentially reversing the problem.

Also the order itself is valuable not only in terms of historical and state-like data, but also for the purpose of analysis and re-marketing.

For example, for every abandoned cart and or order (which still is an abandonment of cart) lays an excellent opportunity for you to re-market to the customer because you have the contact information.

You could be leaving a substantial amount of money on the table. Not only that, you are missing a great opportunity to survey your customers as to why they did not proceed with the purchase so that you can uncover issues with:

  • the technical process
  • the landing page conversion optimization
  • message-to-market match

...among others.

Alternative approach:

Instead of doing as you suggest, I would leave everything as is and let abandoned carts/orders come through however you could do any number of the following (with code automation):

  • after N-hours or N-days give the order a new status let's call it "abandoned" for example
  • filter orders out of the main order/default list table into their own section outside of the main default query
  • optionally after N-hours or N-days if the sale does not convert, automatically purge orders with the "abandoned" status

If you try and do it the way you are thinking, in reverse, you will likely cause more problems (bugs) than worth the time or hassle.

That's my opinion of course.

| improve this answer | |
  • @Ele You're welcome... – Adam Mar 15 '19 at 13:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.