Cancel Unpaid Bank Transfer Orders After a Few Days
Automatically cancels on-hold orders paid by bank transfer or cheque that are still unpaid after a set number of days, returning the stock to your shop.
Opens WPIDE on
Code
$wpide_unpaid = array(
'days' => 7, // Days before cancelling.
'gateways' => array( 'bacs', 'cheque' ), // Payment method IDs.
);
add_action( 'init', function () {
if ( ! wp_next_scheduled( 'wpide_cancel_unpaid_orders' ) ) {
wp_schedule_event( time() + HOUR_IN_SECONDS, 'daily', 'wpide_cancel_unpaid_orders' );
}
} );
add_action( 'wpide_cancel_unpaid_orders', function () use ( $wpide_unpaid ) {
if ( ! function_exists( 'wc_get_orders' ) ) {
return;
}
$orders = wc_get_orders( array(
'status' => 'on-hold',
'payment_method' => $wpide_unpaid['gateways'],
'date_created' => '<' . ( time() - $wpide_unpaid['days'] * DAY_IN_SECONDS ),
'limit' => 50,
) );
foreach ( $orders as $order ) {
$order->update_status( 'cancelled', sprintf( 'Cancelled automatically: unpaid after %d days.', $wpide_unpaid['days'] ) );
}
} );
Notes
Runs daily through WP-Cron, 50 orders per run, and customers get WooCommerce's cancelled order email if it is enabled.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.