Create Custom Menu in WordPress Dashboard
Complete tutorial on create custom menu in wordpress dashboard. Discover practical examples, implementation tips, and expert advice for WordPress and WooCo
Read More โImplement custom order statuses in WooCommerce with dedicated email notifications using register_post_status and custom email classes. Create tailored workflow statuses for your business needs, extend WC_Email class for custom email templates, and trigger automated emails when orders change to custom statuses. Complete guide with status registration, admin display, email triggers, and template creation for professional order management.
Enhancing your WooCommerce store with custom features allows you to better tailor it to your business needs. This tutorial will show you how to set up a custom order status and link it with personalized email notifications. With a few easy steps, you can fully integrate this new status into your store’s workflow.
Step 1: Define Your Custom Order Status
Begin by registering a new status using register_post_status. Add the code below to your theme’s functions.php or within a custom plugin:
// Register a custom order status
function add_custom_order_status() {
register_post_status( 'wc-custom-status', array(
'label' => _x( 'Custom Status', 'Order status', 'your-text-domain' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Custom Status (%s)', 'Custom Status (%s)', 'your-text-domain' )
) );
}
add_action( 'init', 'add_custom_order_status' );
Step 2: Display Status in Admin Orders List
Ensure your new status appears in the order filter dropdown with the wc_order_statuses filter:
// Add to admin order status filter
function add_custom_order_status_to_filter( $order_statuses ) {
$order_statuses['wc-custom-status'] = _x( 'Custom Status', 'Order status', 'your-text-domain' );
return $order_statuses;
}
add_filter( 'wc_order_statuses', 'add_custom_order_status_to_filter' );
Step 3: Register Email Trigger for Custom Status
Use woocommerce_email_actions to add a custom trigger:
// Email trigger for custom status
function add_custom_email_action( $email_actions ) {
$email_actions[] = 'woocommerce_order_status_wc-custom-status';
return $email_actions;
}
add_filter( 'woocommerce_email_actions', 'add_custom_email_action' );
Step 4: Create a Custom Email Handler Class
Next, build a class extending WC_Email. Save it as custom-new-order-email.php:
// custom-new-order-email.php
class Custom_New_Order_Email extends WC_Email {
public function __construct() {
$this->id = 'custom_new_order';
$this->title = __( 'Custom New Order', 'your-text-domain' );
$this->description = __( 'Triggered when an order changes to your custom status.', 'your-text-domain' );
$this->heading = __( 'Custom New Order', 'your-text-domain' );
$this->subject = __( 'New Order: #{order_number}', 'your-text-domain' );
$this->template_html = 'emails/custom-new-order.php';
$this->template_plain = 'emails/plain/custom-new-order.php';
$this->template_base = plugin_dir_path( __FILE__ );
$this->placeholders = array(
'{order_number}' => '',
);
parent::__construct();
}
public function trigger( $order_id ) {
$this->object = wc_get_order( $order_id );
$this->recipient = $this->object->get_billing_email();
$this->placeholders['{order_number}'] = $this->object->get_order_number();
$this->heading = apply_filters( 'woocommerce_email_heading_' . $this->id, $this->heading, $this->object );
$this->subject = apply_filters( 'woocommerce_email_subject_' . $this->id, $this->subject, $this->object );
parent::trigger( $order_id );
}
}
Step 5: Attach Custom Email to WooCommerce
Finally, register your email class via the woocommerce_email_classes filter:
// Add custom email class
function add_custom_email_class( $email_classes ) {
require_once 'path/to/custom-new-order-email.php';
$email_classes['Custom_New_Order_Email'] = new Custom_New_Order_Email();
return $email_classes;
}
add_filter( 'woocommerce_email_classes', 'add_custom_email_class' );
Final Thoughts
You’ve now successfully added a custom order status in WooCommerce along with a dedicated email template. This approach helps improve communication with customers and streamline your workflow. Pro Tip: Always make changes using a child theme or a custom plugin. Test thoroughly before applying on your live store. Need more help? Check the official WooCommerce Email Customization Guide. 
Search our archives or reach out to our team for solutions and expert advice.