Preventing Mass Email Sending After Order Status Deletion in WooCommerce

In a recent Business Bloomer Club discussion, a member sought advice on handling a sudden flood of 25,000 triggered emails after a client accidentally deleted a custom order status in WooCommerce.

This error caused orders to transition to default statuses, triggering an email for each one. Concerned about reconnecting the SMTP server and potentially sending all the emails, they were looking for ways to pause or prevent further email distribution.

Here’s a step-by-step guide to managing and preventing mass email sending after such incidents.

Continue reading Preventing Mass Email Sending After Order Status Deletion in WooCommerce

Creating a Custom Workflow for Tracking WooCommerce Order Status for Shipments

In a recent Business Bloomer Club Slack thread, a WooCommerce store owner sought a way to streamline their order fulfillment process.

Their challenge involved coordinating two departments—shipping and accounting—to ensure orders were only marked as “Completed” when fully processed and shipped. To track orders awaiting shipment, they wanted a solution that involved minimal setup and avoided external software.

Here’s an overview of the solutions and workflow improvements shared.

Continue reading Creating a Custom Workflow for Tracking WooCommerce Order Status for Shipments

WooCommerce: Send Default Order Email For Custom Status Transition

WooCommerce offers flexibility with custom order statuses, but email notifications can be limited. By default, in fact, WooCommerce triggers the “completed”, “processing”, “on-hold” and all the other default emails when the order status changes from X to Y as defined in the plugin code.

But what if you want to trigger the “Order Completed” email if the order status transitions from your custom order status to the “completed” one? Or what if you want to trigger the “Order On-hold” email beyond its default triggers?

This post unlocks a powerful technique: triggering a default order email for a custom order transition. Let’s see how it’s done!

Continue reading WooCommerce: Send Default Order Email For Custom Status Transition

WooCommerce: Allow Order Editing For Custom Order Status

WooCommerce admins are allowed to “edit” an order only when this is in the “on hold” or “pending payment” status. By “edit” I mean having the chance of modifying or adding products, fees, shipping and recalculating the totals, which are not allowed once the order has been placed (“processing“, “completed“, etc.).

However, there are many reasons why you’d want to have the right to edit a processing, completed, or custom status order – of course as long as you don’t end up changing the total, as customers already paid at that stage.

Think about the following scenarios:

  • you customized the items table and added a custom field, and you want to set the custom field value when the order is “processing
  • you need to edit the shipping method name AFTER checkout, and you want to be able to rename it when the order is “completed
  • you need to add a fee and a discount of equal amounts (so that the total stays the same) before completing the order

Either way, let’s enable the little “pencil icon” on a custom order status, so that the admin can customize the order whenever they wish!

Continue reading WooCommerce: Allow Order Editing For Custom Order Status

WooCommerce: Disable Restocking @ Order Cancelled

When an order that has previously reduced stock is “cancelled” or goes to “pending payment” because the payment failed or the store admin decided to change the order status, the wc_maybe_increase_stock_levels() function triggers and restores the order items’ stock quantity.

As usual, some WooCommerce entrepreneurs asked for a way to disable this automatic restocking given their custom setup. It often goes like that – you can’t really please everyone.

This is unless you’re a smart developer and can account for both options, thanks to a WordPress “filter“. Here’s a PHP one-liner that can immediately disable this default behavior, so that you can avoid the automatic restocking (and maybe doing it manually based on your business rules). Enjoy!

Continue reading WooCommerce: Disable Restocking @ Order Cancelled

WooCommerce: Resend Any Order Email

How annoying is the fact you can only resend the “New Order Notification” from the single order admin page? What if you’re testing out and customizing email templates, and need to email yourself the “processing” or the “completed” notification, without having to place a new test order or switching order status twice to re-trigger the notification?

Well, today we will see how to add a “Resend whatever email” function under the “order actions” on the single order edit page. Of course, make sure you switch the billing email to yours, otherwise the customer will get these emails and not you. Enjoy!

Continue reading WooCommerce: Resend Any Order Email

WooCommerce: Automatically Cancel Orders

You may wondering – “but I can already do that from the WooCommerce settings!“. Yes, that’s correct; go to WooCommerce Settings > Products > Inventory and set the “Hold Stock Minutes” value. After that period, unpaid orders will be marked as cancelled to make sure the stock goes back to the initial value.

The problem is – what if you don’t want to use the “Hold Stock Minutes” thing, and even better, what if you don’t use stock management at all? In that case, orders won’t be marked as cancelled automatically.

Also, what if you need to do conditional work e.g. you only want to cancel “failed” orders, while you want to keep “pending” ones as they are? Even in this case, the “hold stock” option won’t work, as you need to specify which order status you want to target and then run the cancel function.

Either way, enjoy!

Continue reading WooCommerce: Automatically Cancel Orders

WooCommerce: Change Payment Gateway Default Order Status

Ok, we all know that Stripe, PayPal and all successful online payment orders go to “processing” order status, BACS and cheque go to “on-hold“, and so on. Each payment gateway has its own default paid status.

Now, what if you use custom order statuses, or what if you wish to change Stripe orders to “completed“, BACS orders to “pending” and PayPal orders to “on-hold“?

Thankfully, this is super easy with a handy PHP snippet. Enjoy!

Continue reading WooCommerce: Change Payment Gateway Default Order Status