WordPress / Woocommerce hook on delete order (i.e. move to trash)

I needed to run a couple functions when a WooCommerce order was deleted / trashed using the admin edit order screen.

I was looking for a specific WooCommerce hook, but then realized I just needed to use the default WordPress hook wp_trash_post and check for the post type (i.e. shop_order). Silly me.

‘wp_trash_post’ example snippet for WooCommerce

In this example, I’ll send a basic email notification every time an order is trashed.

wp_trash_post provides one parameter: the post ID (i.e. order ID if we are just focusing on WooCommerce). You can use it to get other data from the order if needed.

add_action('wp_trash_post','order_trashed_send_email', 10, 1);

function order_trashed_send_email ($order_id) {
  
  // 1. only continue if it is a WooCommerce order (i.e. 'shop_order')
  if( get_post_type($order_id) !== 'shop_order' ) return;
  
  // 2. get other data from order if needed
  $order = wc_get_order( $order_id );
  $edit_order_url = $order->get_edit_order_url();
  
  // 3. setup a basic email with wp_mail
  $to = "[email protected]";
	
  $subject = "Order #$order_id was deleted";

  $message = "
			<p>Hello,</p>
			<p>The order #$order_id was deleted.</p>
            <p><a href="$edit_order_url">View it here</a></p>
  			";
  $headers = "Content-type: text/html";	
  
  wp_mail( $to, $subject, $message, $headers );
	 
}

That’s it! 🤓

Get Weekly WordPress tips

Was this helpful? Every week, I post a useful tip about WordPress development. Subscribe below to get updates by email. (It's free 🙂)

Leave a Comment