Feedback request: Adding order fulfillments to WooCommerce

Order fulfillment is a critical daily task for every ecommerce business, but WooCommerce’s current order interface can make it difficult to manage efficiently. Merchants have told us they spend hours each day trying to identify which orders need attention and managing partial fulfillments. Better visibility into order status, improved tools for processing shipments, and streamlined customer delivery updates would transform this time-consuming process.

Through your feedback, we’ve identified several critical challenges in the current fulfillment workflow:

  • Needing to quickly understand which orders require action.
  • Wanting to add tracking information directly in WooCommerce.
  • Keeping customers automatically updated about their orders.

Furthermore, there is no native support for sending multiple shipments for a single order, often forcing merchants to duplicate and modify orders to ship available items while other items are out of stock.

Introducing order fulfillments

We plan to implement fulfillments into WooCommerce core! This will create a standardized database structure for order fulfillments, enabling each order to have multiple associated fulfillment records. By storing fulfillments in their own database table, we’ll provide a consistent way for both WooCommerce core and extensions to create and manage fulfillments.

Additionally, the new fulfillments interface will bring everything together in one place. As a merchant, you’ll be able to see which orders need fulfillment at a glance and select specific items to fulfill. Each fulfillment can include tracking numbers to share with your customers.

For digital and virtual products, the system will automatically create a fulfillment when the order is placed, while physical products will require manual fulfillment. This ensures your fulfillment list only shows items that need your attention.

Orders will automatically show as Unfulfilled, Partially Fulfilled, or Fulfilled based on how many items in the order have been fulfilled. Customers can view the fulfillment status and tracking information in their account area, and receive email notifications when fulfillments occur.

This approach streamlines order management while improving transparency for both merchants and customers.

Proposed design

We are proposing to add a new fulfillment column with status label buttons that serve as an entry point to the order fulfillment side panel. This helps merchants add or view fulfillments while keeping the context of the order list, making it easier to process orders one by one without losing track of progress.

Screenshot of the WooCommerce orders list, with a new "Fulfillment" column added.

Creating fulfillments

One of the key additions in this proposal is the fulfillments sidebar. Accessed by clicking on the fulfillment status button, here is a preview of the initial state in the sidebar for different type of orders.

  1. Creating simple fulfillment
    In this example, all order items have been selected. When the merchant clicks “create fulfillment”, all of the items in the order will be marked as fulfilled. The merchant can also optionally choose to notify the customer of the fulfillment. The order fulfillment status will automatically become “Fulfilled”.
  1. Creating partial fulfillment
    In this scenario, the merchant is only fulfilling 2 of the 3 items from the order. They select the items to fulfill, then click “create fulfillment,” and the selected items are marked as fulfilled. The order fulfillment status will automatically become “Partially Fulfilled”.
  1. Shipment tracking added
    In either scenario, you can attach shipment tracking information, which will be saved with the specific fulfillment and shared with the customers in the email notification and via the account area.

Fulfilment flow — video preview

This example demonstrates an order split into two fulfillments, both with shipment tracking added.

Viewing and editing fulfillments

The following is how the fulfillments sidebar appears after 1 or more fulfillments have already been created. These examples also show what shipment tracking looks like after it has been attached to a fulfillment.

  1. Partially fulfilled (1/2)
    The first fulfillment includes 2 out of 3 order items, with the remaining item ready to be fulfilled in the second fulfillment.
  1. Fully fulfilled (2/2)
    All items in the order have been fulfilled across two fulfillments.
  1. Editing fulfillment
    Any fulfillment can be edited. I.e. the merchant may want to remove a fulfillment, or add an unfulfilled item to an existing fulfillment.

Order edit/detail page

The fulfillment status can also be managed directly from the order detail/edit page through an actionable status label that opens the fulfillments side panel.

Fulfillment status and action button added to the order edit screen.

Your feedback

We’re excited to bring fulfillments to WooCommerce core and want to ensure it works well for all merchants. We’d particularly value your feedback on:

  • Specific use cases we should support, especially any complex fulfillment workflows.
  • How you currently handle fulfillment and any concerns about migrating.
  • Which shipping providers you may need integration with.
  • Features that would make this especially valuable for your business.

Please share your thoughts in the comments below by March 1st, 2025. We plan to begin development in Q2 2025. Your input now will directly shape how we build this feature.


37 responses to “Feedback request: Adding order fulfillments to WooCommerce”

  1. Sounds good, but why is this different to the existing order status – does marking the order fulfilled then change the order status to ‘completed’.

    Personally think the order status is sufficient.

    Is the order tracking going to be based on the existing extension, as a few our warehouses already interact with the API for sending tracking details back to the site.

    1. jameskemp Avatar

      does marking the order fulfilled then change the order status to ‘completed’.

      Yes, it would do.

      Personally think the order status is sufficient.

      Using the order status alone can be complicated, and many merchants end up having to add a tonne of intermediate custom statuses to accomodate their workflows.

      Having the logic separated enables at-a-glance understanding of an orders status. I.e. it’s paid for and partially fulfilled. It’s partially refunded and fully fulfilled. There are numerous combinations which would require a plethora of unique order statuses.

      This is why modern ecommerce platforms utilise statuses for fulfillment, payment, and a more general Open/Completed/Archived state.

      Is the order tracking going to be based on the existing extension, as a few our warehouses already interact with the API for sending tracking details back to the site.

      Yes, it will be based on the existing Woo-owned extension.

  2. I am surprised to see this treated outside of the standard Order Status. I know I’m going to get a lot of merchants asking “What is the difference between the order’s status and fulfilment?” or mistakes being made due to it.

    1. pacmanito Avatar

      It absolutely makes sense to separate these statuses as currently payment and fulfillment statuses are mixed. Some other platforms already have this implemented and this is the way to go for WC. Current implementation has a lot of ambiguity in it.

  3. Looks good to me.

    Is there some sort of relationship between “Order status” and “Fulfillment status” e.g. I’d expect a not-fulfilled order cannot be completed unless you fulfill it?

    Other than this clarification, I like the fulfillment sidebar, nice touch, Will there be a “partial payments” sidebar as well, once you implement multiple payments per order? If yes, maybe only one sidebar can be visible at the same time. Just food for thought

    Well done

    1. jameskemp Avatar

      Is there some sort of relationship between “Order status” and “Fulfillment status” e.g. I’d expect a not-fulfilled order cannot be completed unless you fulfill it?

      It’s a good thought! I’ll put that to the engineers when it comes to development.

      Will there be a “partial payments” sidebar as well, once you implement multiple payments per order?

      Possibly not. To me, multiple payments assigned to an order is a behind-the-scenes kind of thing. It would be more of a “transactions” database, so could include payments, fees, refunds, etc. So each item might appear in different UIs/contexts.

      That’s just theoretically though, we haven’t officially planned any of it yet!

  4. Small business owner here selling physical goods. This is so long overdue.
    Specific use cases we should support, especially any complex fulfillment workflows:
    Apart from what you have listed above,
    1. Consider option to populate a Fulfill by date so that sorting / focus is easier.
    2. Please look at item replacement in an order with multiple items. It could be because of damage during transit OR any other reason.

    How you currently handle fulfillment and any concerns about migrating:
    1. So far almost all would have created workarounds using Custom Orders Status Manager. How would you consider this when we switch over.
    2. What about older orders which have been updated with tracking details using some plugin or the other. How would this get converted over?
    3. Consider provision for a free text field for any specific message that the store owner would want to add – to be sent to the customer – for each fulfillment.
    4. Completed IS NOT THE SAME AS Delivered. Please think this through.
    5. Cash On Delivery Orders required payment from shipping providers to be transferred to store after x days. Please think this through.

    Which shipping providers you may need integration with:
    Allow store owners to add own details of shipping providers. Keep it lean and simple and do not bloat it. Please!

    Features that would make this especially valuable for your business:
    Sorry, you cannot anything new here. All have found workaround in some way or the other. You have woken up pretty late.
    Please CLEARLY THINK through Order Status which is DIFFERENT from Order Payment which is DIFFERENT from Fulfilment. Each have a different flow.
    Please CLEARLY THINK through impact on Analytics while doing all this.

    Hopefully this will not be a long drawn project in itself.

    All the best!

    1. pacmanito Avatar

      Fulfill by date is a nice idea although the devs may consider this to be a plugin territory.
      As for your other thoughts I have some scepticism:
      – “What about older orders” – these is difficult to achieve as there are numerous possible configurations using some plugins or custom code. So trying to get full compatibility with past orders can prevent any updates at all
      – “Consider provision for a free text field” – this is already can be done via order notes or hooking into order emails.
      – “Completed IS NOT THE SAME AS Delivered” – devs haven’t mentioned delivered status at all. To use this status you probably should have an integration with some tracking platform like Aftership, so this is again plugin territory. But I agree that delivered is a delivery status while completed is more like a meta order status describing it’s condition in general.

      “Please CLEARLY THINK through Order Status which is DIFFERENT from Order Payment which is DIFFERENT from Fulfilment.” – 100% agree with this though, different workflow statuses should be separated, so better representing order status with few tags, e.g. “active, paid, not shipped”.

  5. I would suggest adding the ability to add custom shipping companies. Let the tracking number in the URL be represented by a placeholder like %tr or other. These custom shipping companies should be selectable when fulfilling the order. This is also good when using fulfillment partners that don’t offer standard tracking. In those cases we can still include a tracking number (or reference number) along with a URL pointing to the fulfillment provider.

    1. jameskemp Avatar

      Good comment! You will already be able to add custom tracking URLs via manual input – there are designs for that but I didn’t post them here. Happy to share somewhere if you’re interested!

      1. When can we test and contribute more? Do you already have a schedule?

      2. pacmanito Avatar

        It would be nice to have an ability to provide some regex or other logic via setting or filter to get tracking provider from tracking number automatically for custom providers. And a way to overwrite this as comment author mentioned if store owner uses some tracking provider like Aftership, Trackship etc.

  6. Edith Allison Avatar
    Edith Allison

    How will the system cope with partial fulfilment of one order line? 10x Foo ordered, 5x Foo shipped? This is a common requirement in the B2B shops I work with.

    Will there also be tracking of replacements possible when customer reports an item as damaged? 10x Foo ordered, 10 shipped, 1x damaged, 1x replacement shipped.

    1. jameskemp Avatar

      How will the system cope with partial fulfilment of one order line? 10x Foo ordered, 5x Foo shipped? This is a common requirement in the B2B shops I work with.

      We only showcased single items here, but the qty label becomes a picker, so you can choose how many of the same item to fulfill.

      Will there also be tracking of replacements possible when customer reports an item as damaged? 10x Foo ordered, 10 shipped, 1x damaged, 1x replacement shipped.

      No, at least not in this first iteration. this should act as a base of essentials for third-party tools to build more complex senarios like this on top of.

      1. Edith Allison Avatar
        Edith Allison

        thank you for answering my query! i’m also curios if the new functionality will be available to shops using the legacy order storage?

        1. jameskemp Avatar

          I’m unsure, currently. There needs to be a point where we stop supporting the legacy order storage, as HPOS is far superior. Are you actively using the legacy method? If so, why haven’t you migrated?

          1. Edith Allison Avatar
            Edith Allison

            for smaller businesses HPOS can be a “nice to have” when budget is tight. As long as nothing breaks, migration doesn’t get priority.

  7. Peter Viszt Avatar
    Peter Viszt

    Hi!

    How would creating shipping labels fit into this solution? In our use case, the shop owner generates a shipping label for the order in one of these ways:

    automatically based on order status
    with bulk actions
    one by one using a custom “Shipment” column in the orders table
    inside the order details page

    After that the tracking automation(check the tracking info every hour in the background for each shipment/order) switches the order status automatically once the order is dispatched, delivered or returned. I see often store owners creating custom order statuses to handle these actions. And we have custom emails setup that are sent based on the tracking status to the customer.

    So the fulfilment starts with generating a shipping label basically. I can only vouch for the Hungarian market(i develop shipping and invoicing plugins for the local market, 5000+ stores), but i don’t think partial fulfilment ever came up to me as a feature request.

    I think the majority of users are generating shipping labels directly in Woo(see WooCommerce Shipping as an example), so the tracking number is already available after that. But i don’t think any plugins currently handle partial fulfillments, eg creating a new shipping label for the same order that already has one.

    “Notify customer once fulfilled” should be a fixed option in settings imo, i don’t see the use-case where i would change this per customers.

    1. jameskemp Avatar

      How would creating shipping labels fit into this solution?

      We’re wokring closely with WooCommerce Shipping to integrate it into this workflow. The idea for other providers will be to make this flexible enough for them to integrate directly into the fulfillments workflow.

      Shipping integrations at that level would be implemented by the third party using whatever new methods we make available to them.

      I think the majority of users are generating shipping labels directly in Woo(see WooCommerce Shipping as an example), so the tracking number is already available after that.

      Yes, so whatever those plugins create should assign that tracking number to a fulfillment – it takes the burden of managing tracking info away from third parties and creates a consistent way to do it.

      “Notify customer once fulfilled” should be a fixed option in settings imo, i don’t see the use-case where i would change this per customers.

      I believe there are scenarios where merchants might create fulfillments without needing to notify the customer, but I will see what the feedback is like on that.

  8. pacmanito Avatar

    These changes are higly welcome. Implementation seems nice as long as it works smooth. Adding tracking details from main orders screen is a good idea, less clicking and going back and forth this way.
    Separate fulfillment statuses are always a proper way to go as currently order status contains all the different information including payment, fullfillment and general order status. So maybe few tags reflecting order condition would be better and this way it would be easier to pull information.
    Will tracking numbers be available via REST API endpoint?
    And how you gonna store them in DB, in order item meta?

    1. jameskemp Avatar

      Will tracking numbers be available via REST API endpoint?

      Yes!

      And how you gonna store them in DB, in order item meta?

      Fulfillments will get their own database structure, so tracking would become fulfillment meta, most likely.

  9. My initial thought, based on countless hours of customization we’ve implemented to make our order fulfillment work the way we need, is that your efforts may require a lot of work for us in the future. We work with ShipStation and UPS, and have developed our own code to handle all of this. I’m hoping that whatever is done will be optional, and then we can move towards the new fulfillment at our convenience.

    1. jameskemp Avatar

      Yes, you could continue using whatever methods you use currently and just ignore the new fulfillments UI. Ideally those other integrations will move to new methods as well.

      1. Will there be an option/filter we can use to disable the new feature? This would be very important for us as we already have our own custom implementation for fulfillment.

  10. seems the customer side is in the scope 😉

    “Keeping customers automatically updated about their orders.”
    and
    “Customers can view the fulfillment status and tracking information in their account area, and receive email notifications when fulfillments occur.”

    how do you imagine this side, so it is easy for a customer to understand what’s going on in case of partial ?
    – It’s frequent the user, after we give him a call, finally cancels the partial that cannot be delivered on time (on the first delivery). In that case, a partial fullfillment becomes a completed order, and a refund has to be done
    – The customer will ask to see the estimated delivery time for each partial also…

    1. jameskemp Avatar

      Hey Marc,

      We’ll have some designs for the customer-facing side soon which I will share. It’s likely that cancelling specific fulfillments wouldn’t be a core feature, but should be possible via extensions. If we hear enough feedback around this specific scenario, then of course we can also consider it in WooCommerce core.

  11. Current workflow if customer has an order where one orderline cannot be fulfilled:

    Order: 2x foo 1x bar 1x baz
    Bar cannot be fulfilled

    order status change to pending to be able to edit
    Bar orderline set to 0 / deleted
    Order totals updated, some payment gateways requires an updated order object to their API
    Completion of order (fulfillment of rest of order)

    The zeroed / removed orderline will disappear, no history of order originally containing Bar

    Will this work include a proper «partial cancellation» workflow?

    1. jameskemp Avatar

      Hey, it’s unlikely something we’d include in core (unless we hear a lot of feedback about it). However, it’s something any third-party would be able to extend our fulfillments base to handle.

      We want to build a strong base offering which can be extended on top of for use-cases just like this.

  12. You are not approving detailed inputs from merchants, is it?

    1. jameskemp Avatar

      Every data point in core will serve a purpose and not require manual input. However, fulfillments will also allow for fulfillment meta, so any data can be assigned to a fulfillment.

  13. I would like to have my fulfillment through Sellvia

    1. jameskemp Avatar

      That will be possible! they will just want to ensure their integration creates fulfillments within WooCommerce using the recommended methods. Then all your data will be in sync, even if you change providers down the line.

  14. I’d like to raise one additional, very practical concern regarding the ability to modify orders post-purchase. Often, customers will request changes—whether by phone or email—and end up asking for a product that isn’t listed in the online catalog but is available for on-site sale. Since there’s no quick way to add a custom (or “pseudo”) product in WooCommerce, many of my clients end up deleting the existing order in WooCommerce and recreating it manually in their ERP with the extra items.

    However, this creates a fragmented workflow and complicates both order tracking and fulfillment. Several other commenters have also pointed out the need for more flexibility in handling modifications to orders, including adding line items that aren’t formally part of the product catalog. It would be extremely helpful to have a straightforward way to insert a custom SKU (or placeholder product) with a title and price so the entire process remains within WooCommerce—from the initial order to the final fulfillment.

    Although this may sound like a small “edge case,” I have encountered it with every single one of my clients. Others in this thread have likewise emphasized that real-world scenarios often require partial shipments, on-the-fly additions, or manual adjustments to orders. If WooCommerce could accommodate these real-life situations without forcing store owners to rely on workarounds or external systems, it would save significant time and improve the overall order management experience.

    Are we the exception in facing this issue? Based on the comments here, it doesn’t seem so. It’s a common pain point for shop owners who need to keep everything in one system and avoid the complexity of maintaining separate order records. Being able to add pseudo products on the fly, as well as fulfill and finalize those orders from within WooCommerce, would be a huge step forward for real-world usability.

    Thank you for considering this feedback; I’m looking forward to seeing how these improvements might be reflected in the upcoming order fulfillment developments!

    Dimitris

    (response enhanced by chatGPT o1pro)

  15. pacmanito Avatar

    Separate admin column for fulfillment status can be a waste of space in my opinion. In your default layout this way you keep every record within 1 line. But many store owners add some custom columns with some data (e.g. product name, product image, shipping address) so in real life store there can be more columns and every row can already contain few lines. So 1 line per row is not achievable but horizontal space is a scarce for such shops. So maybe few order statuses in one column or even put together with order number is a way to go. Input from other devs/store owners is welcome as this is my personal experience.

  16. How might packing slips be handled for separate fulfilments. We use WooCommerce PDF Invoices & Packing Slips by WPOvernight. We’ve done a lot to customise our environment including creating child orders, so that orders for different delivery dates can be fulfilled separately. We produce packing slips from those child orders.

    I think there is promise in this approach, but given that many people have built their own fulfilment systems, custom and with other plugins, whatever you build needs a lot of hooks or an API to get the fulfilment data for further processing.

  17. I like the plan to extent what the order list can do. In general the sidebar with a dynamic interface looks good to me.

    I think the interface should be build with a merchant persona, that only has the WooCommerce shop. No ERP or other tools. I imagine the person to run the shop/fulfillment on an Tablet. Therefore we should build users stories that reflect the workflow a “very simple shop” needs.
    For complex workflows and special solutions customizations have been done in the past and will always be made.

    1: Touch friendly aka. easy to click
    Fulfillment is a speedy process therefore a UI parts need to be easy to use and clear.

    2: Swap-able Fulfillment:
    Already in the comments we can read about many custom solutions. Maybe the whole fulfillment system should be swap-able. If a shop uses some external solution or wants to customize it heavily the sidebar content could be replaced fully by a plugin.

    3: Local pickup should be consider
    Shipping is probable the majority method to fulfill orders, we should have local pick up and self service in mind.

    4: Steps
    From the video in this post I found the steps not matching the steps my clients take.
    – After picking the order items, maybe add items like gifts -> Create Fulfillment
    – Generation of shipping label and packing slip or if auto generated show them -> Print them
    – Custom steps: for example Hints what Box to pick, Notice about safety
    – Finish it: Optional adding a comment

    5: Show Shipping Status
    If applicable the shipping status should be included in the interface. If a customer calls/asks about an order the interface should be helpful

  18. Joaquín Avatar

    Woow!!!
    Me parece una opción genial que se echaba de menos en comparación con las opciones que se dispone para gestionar pedidos en Prestashop.
    Estoy deseando empezar a probarlo.
    Gracias!

Leave a Reply

Your email address will not be published. Required fields are marked *