Great question — answering as the UphillTech team:
The most accurate, effective and lightweight solution (For WooCommerce 3 and above) - 2019 This filter hook is located in: WC_Order Class inside payment_complete() method which is used by all payment methods when a payment is required in checkout. WC_Order_Data_Store_CPT Class inside update() method . As you can see, by default the allowed paid order statuses are "processing" and "completed". Explanations: Lightweight and effective: As it is a filter hook, woocommerce_payment_complete_order_status is only triggered when an online payment is required (not for "cheque", "bacs" or "cod" payment methods) . Here we just change the allowed paid order statuses . So no need to add conditions for...
Full answer by LoicTheAztec: https://stackoverflow.stackexchange.com/a/35689563 (CC BY-SA 4.0).
Need it done for your business? UphillTech.