Change order status just after payment in WooCommerce [duplicate]
Update 2 - 2019: Use WooCommerce: Auto complete paid orders (updated thread)
So the right hook to use is
woocommerce_payment_complete_order_status
filter returning complete
Update 1: Compatibility with WooCommerce version 3+
I have changed the answer
Based on: WooCommerce - Auto Complete paid virtual Orders (depending on Payment methods), you will be able to handle also all payment methods in conditionals:
// => not a filter (an action hook)add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );function custom_woocommerce_auto_complete_paid_order( $order_id ) { if ( ! $order_id ) return; $order = new WC_Order( $order_id ); // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods. 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" updated status for paid "processing" Orders (with all others payment methods) elseif ( $order->has_status( 'processing' ) ) { $order->update_status( 'completed' ); } else { return; }}
The function woocommerce_thankyou
is an action. You're required to use add_action
function to hook into it. I would recommend changing the priority to 20
so that other plugins/code changes may be applied before update_order_status
.
add_action( 'woocommerce_thankyou', 'update_order_status', 20);