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        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @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

  • WooCommerce: Create a Custom Order Status
    All WooCommerce orders go to either “processing”, “completed”, “on-hold” and other default order statuses based on the payment method and product type. Sometimes these statuses are not enough. For example, you might need to mark certain orders in a different way for tracking, filtering, exporting purposes. Or you might want to disable default emails by […]
  • WooCommerce: Send a Custom Email on Order Status Change
    If you use custom WooCommerce order statuses, or wish to target an order status transition that is not default (e.g. when order goes from “Processing” to “Completed”, the Completed email triggers – but what if you want to target a transition from “Processing” to “Custom Status”?), sending custom emails is quite complex. First of all, […]
  • WooCommerce: Allow Order Editing For Custom Order Status
    WooCommerce admins are allowed to “edit” an order only when this is in the “on hold” or “pending payment” status. By “edit” I mean having the chance of modifying or adding products, fees, shipping and recalculating the totals, which are not allowed once the order has been placed (“processing“, “completed“, etc.). However, there are many […]
  • WooCommerce: Change Payment Gateway Order Status
    Ok, we all know that Stripe, PayPal and all successful online payment orders go to “processing” order status, BACS and cheque go to “on-hold”, and so on. Each payment gateway has its own default paid status. Now, what if you use custom order statuses, or what if you wish to change Stripe orders to “completed”, […]
  • WooCommerce: Get Current User Orders By Status
    This is a neat custom function that you can use in your WooCommerce customization. It can be helpful to know the list of orders placed by the current user ID, for example, if they are in their “My Account” page and you have a custom tab where you want to show e.g. only failed orders. […]

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

18 thoughts on “WooCommerce: Automatically Complete Processing Orders

  1. 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!

  2. 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!

  3. 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

  4. 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

  5. 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 ๐Ÿ™‚

  6. 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

  7. 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!

  8. 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 *