This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

Every 1 second delay costs up to 20% conversions. Learn how to fix it [Free • Mar 10–11]. Save My Spot→

How to Create, Add & Update WooCommerce Custom Order Status (3 Easy Methods)

Updated on January 8, 2026

15 Min Read
Create, Add, Update WooCommerce Custom Order Status

Key Takeaways

  • Custom order statuses enable specific workflow stages like Assembly, Quality Check, or Awaiting Pickup that match unique business needs.
  • Proper implementation requires registering the status via PHP and explicitly declaring compatibility with High-Performance Order Storage (HPOS).
  • Adding custom statuses to the Bulk Actions menu is essential for managing large order volumes efficiently.
  • Store owners can choose between editing functions.php, creating a custom plugin, or using third-party tools depending on their technical comfort.

WooCommerce comes with a set of default order statuses like Pending, Processing, and Completed that help you track an order’s journey. But for many online stores, especially those with unique fulfillment workflows, these default options simply do not cut it.

That is where custom order statuses come in.

Creating a WooCommerce custom order status allows store owners to tailor their order management system to match specific business processes. However, a complete setup goes beyond just naming the status. To make it truly functional, the new status must appear in Bulk Actions for mass editing and work seamlessly with the modern High-Performance Order Storage (HPOS) system in WooCommerce.

In this guide, we will cover three reliable methods to add custom order statuses:

  • Method #1: Adding code to your functions.php file with full support for Bulk Actions and HPOS.
  • Method #2: Using a WooCommerce plugin for a no-code solution.
  • Method #3: Building a lightweight custom plugin to keep your site modular.

We will also cover best practices to ensure your new statuses integrate smoothly with your existing order flow.

Let’s get started.

What Is Custom Order Status in WooCommerce?

A custom order status in WooCommerce allows you to define and manage specific order stages beyond the defaults like “Processing” or “Completed.” While the standard statuses cover the basics of payment and fulfillment, custom statuses let you track the actual work happening in your warehouse, such as “Assembly,” “Quality Check,” or “Awaiting Pickup.”

This granular tracking does two things:

  • Internal Organization: It tells your team exactly where an order is in the pipeline.
  • Customer Transparency: It allows you to trigger specific emails (if configured) so customers know their order isn’t just “Processing,” but is actively being built or packed.

Get Started With WooCommerce Easily!

Launch your WooCommerce store today with one-click deployment on Cloudways. Experience hassle-free setup and start selling in minutes.

Default WooCommerce Order Statuses

Before creating your own custom WooCommerce order statuses, it is important to understand the core statuses included in WooCommerce. These help online store owners handle the standard lifecycle of an order from purchase to delivery.

Status Description
Pending Payment Order received, but no payment initiated. This is the default status for unpaid orders created by the checkout process.
Failed Payment was attempted but declined or failed (e.g., card error due to payment gateway or authentication failure).
Processing Payment received and stock reduced. The order is awaiting fulfillment. All paid orders typically start here unless they contain only downloadable items.
Completed Order fulfilled and complete – requires no further action.
On Hold Awaiting payment. Stock is reduced, but you need to confirm payment manually (e.g., Bank Transfer/BACS).
Cancelled Cancelled by an admin or the customer. Stock is automatically restored if inventory tracking is enabled.
Refunded Refunded by an admin. No further action required.
Draft An incomplete order. This can be an order created manually by an admin or an order in progress via the WooCommerce Checkout Block.

Why Create a Custom Order Status in WooCommerce?

While the default statuses work for standard retail, they often fall short for stores with detailed operations. For example, if you manually assemble products or have a multi-step verification process, you might need statuses like:

  • In Production
  • Awaiting Pickup
  • Quality Check
  • Assembly

Creating a WooCommerce custom order status helps you build a more accurate order flow for both your internal team and your customers.

Here are the key benefits of customizing your order status:

  • Tailored Workflows: Match the order management process to your exact business operations rather than forcing your team to use generic labels.
  • Customer Transparency: Keep customers informed with descriptive updates (e.g., “Quality Check” vs. generic “Processing”). This often reduces customer support inquiries.
  • Better Filtering: Allows admins to sort and filter orders by specific stages, making it easier to batch-process orders that are in the same physical location or stage.
  • Business Insights: Analyze data based on specific stages to identify bottlenecks. For example, if orders sit in “Quality Check” for three days, you know exactly where your delay is.

In the next sections, we will show you how to create your own custom order statuses using three methods: adding code manually, using a plugin, or building a lightweight custom plugin.

How to Customize Order Status in WooCommerce [3 Easy Methods]

There are a few practical ways to customize your order status in WooCommerce, depending on your comfort level with code and how hands-on you want to be. In this guide, we’ll walk you through three easy methods to create WooCommerce custom order statuses:

  • Method #1: Using Code (functions.php) – Best for performance. We provide a complete snippet that includes Bulk Actions and HPOS compatibility.
  • Method #2: Using a Plugin – Best for a no-code solution.
  • Method #3: Building a Custom Plugin – Best for modularity. This keeps your custom status active even if you change your theme.

Method #1: Create a Custom WooCommerce Order Status Using functions.php

First, let’s manually add a custom order status to WooCommerce by directly editing the theme files. This method gives you the most control and ensures your site remains lightweight.

Step 1: Register the Custom Order Status

By default, WooCommerce has no idea your new status exists. We need to register it so the system recognizes ‘Shipment Arrival’ as a valid stage in the order lifecycle.

We will add the code to your theme’s functions.php file. The easiest way to do this is through your WordPress Dashboard:

  1. Go to Appearance → Theme File Editor.
  2. On the right side, locate and click on Theme Functions (functions.php).
  3. Scroll to the very bottom of the file and paste the code below.
function register_shipment_arrival_order_status() {
    register_post_status(
        'wc-arrival-shipment',
        array(
            'label'                     => 'Shipment Arrival',
            'public'                    => true,
            'show_in_admin_status_list' => true,
            'show_in_admin_all_list'    => true,
            'exclude_from_search'       => false,
            'label_count'               => _n_noop(
                'Shipment Arrival <span class="count">(%s)</span>',
                'Shipment Arrival <span class="count">(%s)</span>'
            )
        )
    );
}

add_action( 'init', 'register_shipment_arrival_order_status' );

add code to function.php file to add custom order status in woocommerce

Code Explanation

  • register_post_status(): This is the core WordPress function that creates the new status.
  • ‘wc-arrival-shipment’: This is the unique ID (slug) for your status. It is critical that this starts with wc- (e.g., wc-shipped), otherwise WooCommerce will not recognize it.
  • show_in_admin_status_list: When set to true, this status will appear in the quick filters at the top of the Orders page (e.g., All | Processing | Shipment Arrival), making it easy to sort your orders.

Step 2: Add to the “Order Status” Dropdown

Registering the status is only the first half of the job. Now, we need to make it visible in the dropdown menu inside the “Edit Order” screen so you can actually select it.

Copy and paste this code immediately below the previous snippet:

function add_shipment_arrival_to_order_statuses( $order_statuses ) {
    $new_order_statuses = array();

    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;

        if ( 'wc-processing' === $key ) {
            $new_order_statuses['wc-arrival-shipment'] = 'Shipment Arrival';
        }
    }

    return $new_order_statuses;
}

add_filter( 'wc_order_statuses', 'add_shipment_arrival_to_order_statuses' );

Step 3: Add to “Bulk Actions” & HPOS Support

If you have 50 orders to update, you definitely don’t want to open them one by one. That’s why we need to add our new status to the Bulk Actions dropdown on the main order list.

To ensure this works on modern stores, the code below supports both Legacy WooCommerce and the newer High-Performance Order Storage (HPOS) system. Add this code snippet right after your first two snippets at the end of functions.php.

// 1. Add to Bulk Actions Dropdown
add_filter( 'bulk_actions-edit-shop_order', 'add_shipment_arrival_bulk_action' ); // Legacy
add_filter( 'bulk_actions-woocommerce_page_wc-orders', 'add_shipment_arrival_bulk_action' ); // HPOS

function add_shipment_arrival_bulk_action( $bulk_actions ) {
    $bulk_actions['mark_wc-arrival-shipment'] = 'Change status to Shipment Arrival';
    return $bulk_actions;
}

// 2. Handle the Bulk Action Logic
add_action(
    'handle_bulk_actions-edit-shop_order',
    'process_shipment_arrival_bulk_action',
    10,
    3
);

add_action(
    'handle_bulk_actions-woocommerce_page_wc-orders',
    'process_shipment_arrival_bulk_action',
    10,
    3
);

function process_shipment_arrival_bulk_action( $redirect_to, $action, $ids ) {
    if ( 'mark_wc-arrival-shipment' !== $action ) {
        return $redirect_to;
    }

    foreach ( $ids as $id ) {
        $order = wc_get_order( $id );
        $order->update_status( 'wc-arrival-shipment' );
    }

    return add_query_arg(
        array(
            'shipment_arrival_marked' => count( $ids ),
        ),
        $redirect_to
    );
}

Step 4: Add Admin Notices

When you update orders in bulk, the page reloads, but by default, you won’t see a confirmation message. This can be confusing. To fix this, we will add a small function that displays a green success banner (e.g., “5 orders changed to Shipment Arrival”) after the update is complete.

Add this code to the end of your file:

add_action( 'admin_notices', 'shipment_arrival_bulk_action_admin_notice' );

function shipment_arrival_bulk_action_admin_notice() {
    if ( ! empty( $_REQUEST['shipment_arrival_marked'] ) ) {
        $count = intval( $_REQUEST['shipment_arrival_marked'] );
        printf(
            '<div class="notice notice-success is-dismissible"><p>%s</p></div>',
            sprintf(
                _n(
                    '%s order status changed to Shipment Arrival.',
                    '%s order statuses changed to Shipment Arrival.',
                    $count
                ),
                $count
            )
        );
    }
}

Pro Tip: Add Color to Your Status

By default, your new custom status will appear as a generic grey badge, which can be hard to spot in a busy dashboard. To make it stand out, we can add a little CSS to give it a distinct color (like orange).

Add this snippet to apply the style. Again, we’ll add this code to the end of our functions.php file.

add_action( 'admin_head', 'style_shipment_arrival_status' );

function style_shipment_arrival_status() {
    echo '<style>
        .order-status.status-wc-arrival-shipment {
            background: #ffba00 !important;
            color: #fff !important;
        }
    </style>';
}

Step 5: Verify the Results

Now that the code is in place, let’s verify that everything is working as expected:

  • Go to WooCommerce → Orders.

woocommerce orders

  • Open any order and click the Status dropdown. You should see Shipment Arrival listed there.

woocommerce custom order status added

  • Go back to the main Order list. Select multiple orders, click the Bulk Actions dropdown, and check if “Change status to Shipment Arrival” is available. In our case, as you can see in the screenshot below, it is ready to use.

bulk action change woocommerce order status

Method #2: Create Custom Order Status Using Plugin

If you prefer a no-code solution, using a plugin is a great alternative. There are several options available, but for this guide, we will use Custom Order Status Manager for WooCommerce by Bright Vessel because it allows you to add icons and distinct colors to your statuses easily.

First, install and activate the plugin via the WordPress dashboard just like any other plugin.

Custom Order Status Manager for WooCommerce

After activating the plugin, follow these steps to create your new status:

  • Go to WooCommerceOrder Status in your WordPress dashboard.

access woocommerce then order status

  • Click the “Add New Order Status” button at the top.

add order status option

  • Enter a name for your custom order status in the Title field. For this example, we will name it “Verification Pending”.

give title to your custom woocommerce order status

  • Add a Slug: Enter a unique slug in the appropriate field (e.g., verification-pend). This is required.
  • Add Visuals: You can also choose an icon or assign a specific color. This is highly recommended as it helps you spot the status quickly in the order list.

woocommerce order status options

  • Click the “Publish” button to save your new status.

publish the order status

Now that the status is created, let’s verify it.

Go to WooCommerce > Orders and open any existing order. Click on the Status dropdown, and you will see your new “Verification Pending” status available for selection.

woocommerce custom order status added via plugin

Method #3: Create a WooCommerce Custom Order Status Using a Custom Plugin

If you prefer not to edit your theme files or use third-party plugins, building your own custom plugin is the best option. This approach is modular, meaning your custom status will keep working even if you change your theme in the future.

Here is how to build a lightweight plugin that supports Bulk Actions and HPOS.

Step 1: Create Your Plugin Folder and File

  1. On your local computer, create a new folder named custom-order-status.

create a new folder named custom-order-status

  1. Inside that folder, create a PHP file named custom-order-status.php.

create a PHP file named custom-order-status.php

Step 2: Add Plugin Header & HPOS Compatibility

Open the custom-order-status.php file in a code editor (like VS Code or Notepad) and paste the following code.

This header tells WordPress what your plugin is. Crucially, we also add the code to declare compatibility with High-Performance Order Storage (HPOS) so your site runs at full speed.

<?php
/*
Plugin Name: Custom Order Status for WooCommerce
Description: A lightweight plugin to add and manage custom order statuses in WooCommerce.
Version: 1.0
Author: Your Name
License: GPL2
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Prevent direct access
}

// Declare HPOS Compatibility
add_action( 'before_woocommerce_init', function() {
    if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
            'custom_order_tables',
            __FILE__,
            true
        );
    }
} );

Header for WordPress plugin details

Step 3: Register the Status & Add Functionality

Now, paste the core logic below the header code. This snippet registers the status, adds it to the dropdown, and enables Bulk Actions support.

// 1. Register the custom order status
add_action( 'init', 'register_custom_order_status' );

function register_custom_order_status() {
    register_post_status(
        'wc-awaiting-pickup',
        array(
            'label'                     => 'Awaiting Pickup',
            'public'                    => true,
            'exclude_from_search'       => false,
            'show_in_admin_all_list'    => true,
            'show_in_admin_status_list' => true,
            'label_count'               => _n_noop(
                'Awaiting Pickup <span class="count">(%s)</span>',
                'Awaiting Pickup <span class="count">(%s)</span>'
            ),
        )
    );
}

// 2. Add custom status to WooCommerce dropdown
add_filter( 'wc_order_statuses', 'add_custom_order_statuses' );

function add_custom_order_statuses( $order_statuses ) {
    $new_order_statuses = array();

    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;

        if ( 'wc-processing' === $key ) {
            $new_order_statuses['wc-awaiting-pickup'] = 'Awaiting Pickup';
        }
    }

    return $new_order_statuses;
}

// 3. Add to Bulk Actions (Legacy & HPOS)
add_filter( 'bulk_actions-edit-shop_order', 'add_awaiting_pickup_bulk_action' );
add_filter( 'bulk_actions-woocommerce_page_wc-orders', 'add_awaiting_pickup_bulk_action' );

function add_awaiting_pickup_bulk_action( $bulk_actions ) {
    $bulk_actions['mark_wc-awaiting-pickup'] = 'Change status to Awaiting Pickup';
    return $bulk_actions;
}

// 4. Handle Bulk Action Logic
add_action( 'handle_bulk_actions-edit-shop_order', 'process_awaiting_pickup_bulk_action', 10, 3 );
add_action( 'handle_bulk_actions-woocommerce_page_wc-orders', 'process_awaiting_pickup_bulk_action', 10, 3 );

function process_awaiting_pickup_bulk_action( $redirect_to, $action, $ids ) {
    if ( 'mark_wc-awaiting-pickup' !== $action ) {
        return $redirect_to;
    }

    foreach ( $ids as $id ) {
        $order = wc_get_order( $id );
        $order->update_status( 'wc-awaiting-pickup' );
    }

    return add_query_arg(
        array(
            'awaiting_pickup_marked' => count( $ids ),
        ),
        $redirect_to
    );
}

Step 4: Add Admin Notices

Just like in Method #1, we want to ensure you get a confirmation message when you update orders in bulk. Add this final piece of code to your file so that a green banner appears (e.g., “3 orders changed to Awaiting Pickup”) after a bulk update.

// 5. Add Admin Notice for Bulk Action
add_action( 'admin_notices', 'awaiting_pickup_bulk_action_admin_notice' );

function awaiting_pickup_bulk_action_admin_notice() {
    if ( ! empty( $_REQUEST['awaiting_pickup_marked'] ) ) {
        $count = intval( $_REQUEST['awaiting_pickup_marked'] );
        printf(
            '<div class="notice notice-success is-dismissible"><p>%s</p></div>',
            sprintf(
                _n(
                    '%s order status changed to Awaiting Pickup.',
                    '%s order statuses changed to Awaiting Pickup.',
                    $count
                ),
                $count
            )
        );
    }
}

Step 5: Install and Activate the Plugin

Now it’s time to bring your plugin into WordPress:

  1. Zip the folder (custom-order-status) into a .zip file.

custom-order-status .zip file

  1. In your WordPress admin, go to Plugins → Add New → Upload Plugin.

Upload a plugin

  1. Upload the zip file, click Install Now, and then Activate Plugin.

upload the zip file to activate the plugin

Activate the plugin

Once activated, go to WooCommerce → Orders. You will see “Awaiting Pickup” in the status dropdown and the Bulk Actions menu!

Edit order

And there you have it—three different ways to get custom statuses working on your site.

If you managed to get the code working, great! You now have a lightweight solution that does exactly what you need. But if you decided that messing with PHP files isn’t for you, or if you just want more bells and whistles (like email triggers) without the manual work, a dedicated plugin might be the better route.

Future-Proof Your WooCommerce Store with Autonomous

Keep your store ready for all the unexpected traffic spikes with Cloudways Autonomous. Stay ahead of the curve with advanced scalability and cutting-edge technology.

Top Free Custom Order Status Plugins for WooCommerce

If you prefer not to touch code, using a plugin is a safe and effective way to manage your order workflow. Here are the top three free options that are fully compatible with modern WooCommerce versions.

1. Custom Order Status for WooCommerce by Tyche Softwares

Custom Order Status Plugin for WooCommerce

If you are running a store with a complex fulfillment cycle, this plugin gives you the flexibility to shape your order flow exactly the way you need. With Custom Order Status, you can build out stages like “Packaging,” “Quality Check,” or “Ready for Pickup”—complete with icons and colors.

Crucially, this plugin is HPOS (High-Performance Order Storage) compatible, meaning it won’t slow down your database. It also supports automation rules, allowing you to update statuses automatically after a set number of days.

Plugin Details:

  • Active installs: 10,000+
  • Rating: 4.5/5
  • HPOS Compatible: Yes
  • Best feature: Advanced email triggers for each status

2. Ni WooCommerce Custom Order Status by Anzar Ahmed

Ni WooCommerce Custom Order Status

For those who need a lightweight, no-nonsense solution, Ni WooCommerce Custom Order Status offers a refreshingly straightforward interface. You can add unlimited custom statuses, assign colors for easier tracking, and manage everything from the familiar WooCommerce order screen.

Where it stands out is the built-in reporting module—it gives you a snapshot of how many orders are sitting in each status. That kind of visibility can quickly reveal workflow bottlenecks (e.g., too many orders stuck in “Packaging”).

Plugin Details:

  • Active installs: 2,000+
  • Rating: 4/5
  • HPOS Compatible: Basic Support
  • Best feature: Simple “Status Count” dashboard widget

3. Custom Order Status Manager for WooCommerce by Bright Plugins

Custom Order Status Manager for WooCommerce by Brightvesseldev

We used this plugin in Method #2 of this guide because it strikes the perfect balance between power and simplicity. Custom Order Status Manager allows you to create new statuses, assign default ones to specific payment methods, and customize email notifications—all for free.

It is also fully HPOS compatible and adds a dedicated status column to your main order list, making it easier to scan progress at a glance. Unlike many competitors, it includes premium-style features like icon customization without charging extra.

Plugin Details:

  • Active installs: 30,000+
  • Rating: 4.7/5
  • HPOS Compatible: Yes
  • Best feature: Ability to assign statuses to specific payment gateways

Best Practices for WooCommerce Custom Order Status

Creating a custom status is easy, but managing it effectively requires a strategy. Here are the best practices to ensure your new workflow improves efficiency rather than creating confusion.

  • Stick to the ‘wc-‘ Prefix: When registering a status via code, always start your slug with wc- (e.g., wc-awaiting-pickup). WooCommerce functions rely on this prefix to identify the status correctly in the database.
  • Map Statuses to Emails: Remember that adding a status does not automatically trigger an email. If you want customers to know their order is “In Assembly,” you must explicitly connect your new status to a WooCommerce email template.
  • Keep It Simple: Avoid “Status Bloat.” Only create a new status if it requires a specific action from your team (e.g., “Quality Check”). If a status is just for information (e.g., “Reviewing”), consider using Order Notes instead.
  • Test on Staging First: Messing with order statuses can sometimes break the checkout flow or payment gateways. Always test your code or plugin on a staging environment before pushing it to your live store.
  • Check HPOS Compatibility: If you use a plugin, ensure it declares compatibility with High-Performance Order Storage (HPOS). Using outdated plugins for order management can significantly slow down your dashboard.

Wrapping Up!

Adding custom order statuses in WooCommerce is one of the best ways to professionalize your fulfillment process. Instead of leaving customers guessing with a generic “Processing” label, you can keep them informed with precise updates like “Assembly” or “Quality Check.”

In this guide, we covered three reliable ways to implement this:

  • Method #1: Using code in your functions.php file (Best for performance & HPOS).
  • Method #2: Using a free plugin like Custom Order Status Manager (Best for no-code users).
  • Method #3: Building a custom lightweight plugin (Best for modularity).

We also ensured that your new statuses aren’t just cosmetic—they now work with Bulk Actions and are fully compatible with WooCommerce’s High-Performance Order Storage (HPOS).

With these tools, you can streamline your operations and reduce customer support tickets. Choose the method that fits your comfort level and start optimizing your workflow today.

Frequently Asked Questions

Q. What is a custom order status in WooCommerce?

A custom order status is a user-defined label (like “Awaiting Pickup”) that helps you track specific stages of an order’s lifecycle beyond the default options like “Processing” or “Completed.”

Q. How do I create a custom order status in WooCommerce?

You can create a custom status by adding a code snippet to your theme’s functions.php file using the register_post_status function, or by using a dedicated plugin. For modern stores, ensure your method is compatible with High-Performance Order Storage (HPOS).

Q. Can I integrate custom order statuses with WooCommerce email notifications?

Yes. While adding a status via code doesn’t send emails automatically, you can link custom order statuses with email notifications using hooks or by using a plugin like “Custom Order Status Manager” which handles this for you.

Q. What plugins are best for managing custom order statuses in WooCommerce?

The top free plugins include Custom Order Status for WooCommerce by Tyche Softwares and Custom Order Status Manager by Bright Plugins. Both are HPOS compatible and allow for easy customization.

Q. Can I display custom order statuses in WooCommerce reports?

Yes, custom order statuses can be included in WooCommerce reports. Most dedicated plugins include this feature automatically, while custom code solutions may require additional filters to ensure the statuses appear in your sales analytics.

Q. How to change order status in WooCommerce?

To change an order status manually, go to WooCommerce > Orders, click on an order, and select the new status from the dropdown. To change multiple orders at once, use the “Bulk Actions” dropdown on the main order list (as detailed in Method #1 of this guide).

Share your opinion in the comment section. COMMENT NOW

Share This Article

Abdul Rehman

Abdul is a tech-savvy, coffee-fueled, and creatively driven marketer who loves keeping up with the latest software updates and tech gadgets. He's also a skilled technical writer who can explain complex concepts simply for a broad audience. Abdul enjoys sharing his knowledge of the Cloud industry through user manuals, documentation, and blog posts.

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Start my tour