1
votes

I need to set all WooCommerce orders that come in as "on-hold" to "processing" and also have the order-processing email sent out immediately.

I tried this

function custom_woocommerce_auto_order( $order_id ) {
if ( ! $order_id ) {
    return;
}

$order = wc_get_order( $order_id );
if( 'on-hold'== $order->get_status() ) {
    $order->update_status( 'processing' );
}
}
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_order' );

Although the status changes, the "on-hold" email notification will still be sent even though it should only be the "processing" email notification.

Any advice?

1

1 Answers

2
votes

An order will have the status on-hold as long as the payment is not completed. To change the default order status for certain payment methods immediately to processing (and skip the on-hold status) and send the processing email notification, you can use:

  • Bacs - woocommerce_bacs_process_payment_order_status filter hook
  • Cheque - woocommerce_cheque_process_payment_order_status filter hook
  • Cod - woocommerce_cod_process_payment_order_status filter hook

So you get:

function filter_process_payment_order_status( $status, $order ) {
    return 'processing';
}
add_filter( 'woocommerce_bacs_process_payment_order_status','filter_process_payment_order_status', 10, 2 );
add_filter( 'woocommerce_cheque_process_payment_order_status','filter_process_payment_order_status', 10, 2 );
add_filter( 'woocommerce_cod_process_payment_order_status', 'filter_process_payment_order_status', 10, 2 );

These filters cause the status to change to the desired status. The email notification will be sent automatically based on this