WooCommerce: Automatically Complete Processing Orders

If you wish to mark paid orders as “Completed” automatically (i.e. without having to manually login to the site and “check” processing orders one by one), you can use the code below.

What is more, this snippet will completely skip the “Processing” order status transition, which means no “Order Processing” email notification will trigger either. Once again, these 4 lines of code could save you millions of hours… hope this helps!

A paid order (via Stripe) is not getting the “Processing” status any longer – instead, it’s going straight to “Completed”

PHP Snippet: Autocomplete WooCommerce Paid Orders

/**
 * @snippet       Programmatically Complete Paid WooCommerce Orders
 * @how-to        businessbloomer.com/woocommerce-customization
 * @author        Rodolfo Melogli, Business Bloomer
 * @testedwith    WooCommerce 3.8
 * @community     https://businessbloomer.com/club/
 */

add_filter( 'woocommerce_payment_complete_order_status', 'bbloomer_autocomplete_processing_orders', 9999 );

function bbloomer_autocomplete_processing_orders() {
   return 'completed';
}

Where to add custom code?

You should place custom PHP in functions.php and custom CSS in style.css of your child theme: where to place WooCommerce customization?

This code still works, unless you report otherwise. To exclude conflicts, temporarily switch to the Storefront theme, disable all plugins except WooCommerce, and test the snippet again: WooCommerce troubleshooting 101

Related content

Rodolfo Melogli

Business Bloomer Founder

Author, WooCommerce expert and WordCamp speaker, Rodolfo has worked as an independent WooCommerce freelancer since 2011. His goal is to help entrepreneurs and developers overcome their WooCommerce nightmares. Rodolfo loves travelling, chasing tennis & soccer balls and, of course, wood fired oven pizza. Follow @rmelogli

24 thoughts on “WooCommerce: Automatically Complete Processing Orders

  1. Is this still working? I just updated a bunch of stuff and now it doesn’t appear to be working for me.

    1. Yep, I use it on this same website!

  2. Hi

    Does this update all historical orders or just those that come in after the coding has been added to functions.php ?

    1. Correct, it’s not retroactive

  3. Thank you for this amazing and simple code snippet! I found it very very useful for Woo Stripe gateway, specifically for virtual products that are not downloadable. The Stripe gateway will only set the status to Completed if both Virtual and Downloadable are checked per product. If just virtual then it will set it to Processing even after a successful payment which is not desired in this case. Thanks again!

  4. Hey Rodolfo,

    Is it possible to add a time delay to your code snippet, e.g. 24 or 48 hours?

    Many thanks for all your fantastic code snippets. They always serve as a great guide.

    Kind regards,
    Pairfum London

    1. Hello there, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  5. Hi Rudolfo, your script works fine, but maybe not always anymore?
    On a client site 4 payments this year received the status ‘completed’, but afterwards it turned out that they were not paid.

    From the order notes in Woocommerce it seems that processing the payments took longer than usual and therefore the customers left the payment page and returned to the website. After doing this, they received the order completed email message including a PDF invoice and on the site the order is marked completed.

    The Woocommerce Mollie plugin is installed. Mollie is a European payment gateway like Ayden.

    Thanks for all your helpful blogs, regards, Elisabeth

    1. Hello Elisabeth, thanks so much for your comment! I just retested this on the latest version of WooCommerce and it still works. Unfortunately this looks like custom troubleshooting work and I cannot help here via the blog comments. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding! ~R

      1. Same here. It does not always work with Mollie PSP.

        1. I see. Maybe there is some bug that needs fixing in the Mollie plugin. Because this works perfectly for PayPal, Stripe, and others

  6. In the Woocommerce official documentation, they suggests to use `add_action` on `woocommerce_thankyou` instead of `add_filter` on `woocommerce_order_status_completed`.

    Any comments on the pros and cons of each?

    Thanks!

    https://woocommerce.com/document/automatically-complete-orders/

    1. I have also tested both solution, seems like the one in WooCommerce documentation works but this does not.

      1. Thanks for your comments Ken. This snippet works fine, I use it here on Business Bloomer as well. Do you use a custom payment gateway or one that is not developed by WooCommerce?

        The main difference between the two is here: “this [Business Bloomer] snippet will completely skip the “Processing” order status transition, which means no “Order Processing” email notification will trigger either”

        1. Thanks for your reply, I am using the WooSa adyen plugin (https://wordpress.org/plugins/integration-adyen-woocommerce/).

          1. Fair enough, I see it’s a pretty new plugin, so if I were you I’d contact support and see if a fix is needed

  7. Hi, I was wondering if it was possible to auto-complete for selected product categories only?

    1. I suggest you take a look at “conditional logic”: https://businessbloomer.com/woocommerce-conditional-logic-ultimate-php-guide/. Enjoy 🙂

  8. The code snippet works great to automatically mark an order as completed after payment has been processed, thank you. But it seems as if it doesn’t trigger the hook woocommerce_order_status_completed.

    I have to manually change the status of the order in the backend. En then manually change the order status to completed before the hook woocommerce_order_status_completed – and my custom code hooked to this – gets triggered.

    Have you experienced this? Any suggestions? (WooCommerce 3.9.3)

    1. Sounds weird to me, honestly. This works fine on my setup

  9. PS. I wonder if your snippet could be merged with this one somehow?:

    https://gist.github.com/willgorham/874c4ac943fc27443cd862a93764d659

    I’m in need of a solution for WooCommerce subscription products that I would like to have auto-completed.

    1. Hey Jonas, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  10. Thank you! This is a really useful snippet!

    Was wondering if there’s a way to make it only apply to orders that only contain virtual products?

    Cheers!

Questions? Feedback? Customization? Leave your comment now!
_____

If you are writing code, please wrap it like so: [php]code_here[/php]. Failure to complying with this, as well as going off topic or not using the English language will result in comment disapproval. You should expect a reply in about 2 weeks - this is a popular blog but I need to get paid work done first. Please consider joining the Business Bloomer Club to get quick WooCommerce support. Thank you!

Your email address will not be published. Required fields are marked *