Warehouse & Shipping Management Guide¶
This guide explains how to use the Warehouse section to manage shipments, generate labels, and handle specific workflows like DHL.
Overview¶
The Warehouse section (found under WooCommerce > Warehouse) is the central hub for managing your shipping operations. It allows you to track shipping batches, generate bundled labels, and finalize shipment orders.
The page is divided into three main sections: 1. Recent Shipment Orders: For managing provider-level orders (manifests) and AWBs. 2. Generated labels: The shipping batches and their progress. Anything your site adds through the warehouse/render-page/start hook — such as a "generate labels" button — sits in this section's header. 3. Others: Page-level extras that belong to no single batch, currently the DHL stop note. It sits at the foot of the page and is hidden if it would be empty.
1. Generating Labels¶
Labels are processed in Batches. When you request labels for orders (either individually or in bulk from the Orders page), they appear here.
Managing Batches¶
Every column in the Shipping Batches table counts orders, so the numbers can be read against each other:
- Status: What is happening to the batch right now — see below.
- Requested: Orders in this batch.
- Created: Orders whose shipment was created.
- Failed: Orders with a failed step. An order can be counted in both Created and Failed — its shipment exists, but the label could not be fetched.
- Pending: Orders with a step still waiting in the queue.
Behind the scenes each order is queued twice, as a create_shipment step and a create_label step. Hover any of these cells to see that breakdown: an order that got nowhere has two failed steps, but it is still one order to fix.
The table lists batches with activity in the last 7 days, so the page stays fast as the queue grows. Click Show orders on a batch to load its order links; they are fetched on demand rather than on every page view.
To look further back, change the window with a filter:
Batch status¶
A batch is never just "in progress" — the status column says which of these it is:
| Status | What it means | What to do |
|---|---|---|
| Done | Everything went through. | Build the bundle and print. |
| Running | A background runner is working through the queue. | Wait, then reload. |
| Queued | Work is waiting to be picked up. | Nothing, unless it stays this way. |
| Partly failed | Some orders failed, the rest are fine. | Retry failed, or bundle without them. |
| Stuck | Work is queued but nothing is processing it. | Dispatch/Resume. |
| Failed | Not a single shipment was created. | Read Why it failed, fix the cause, then Retry failed. |
When a batch has failures, a Why it failed link appears under the status. It shows the provider's own error message, grouped so fifty orders that died on the same expired token read as one problem, not fifty. Errors caused by an earlier failure — a label that could not be fetched because its shipment was never created — are listed last, because the error above them is the one to act on.
Actions¶
- Retry failed (N): Puts the batch's failed orders back in the queue and starts processing them again. N is the number of orders, matching the Failed column. This is what to use on a batch that failed outright: Dispatch/Resume only picks up work that is still pending, and a fully failed batch has none left. A retry never books a second parcel for an order that did reach the provider before failing — if this batch already produced a label for the order, of the type it asked for, that label is reused. Labels from earlier batches are never reused, so re-shipping an order still creates a new parcel. The button is hidden while the batch is Running, because requeueing next to an active runner could process the same order twice.
- Dispatch/Resume: Starts or continues processing the queue for the specific batch. Use this if a batch is Stuck or if you have a large number of labels to process.
- Build bundle: Once labels are created, click this to generate a single PDF containing all labels in the batch. The button is hidden while a batch has nothing to bundle.
- Download: After the bundle is built, a "Download" button will appear, allowing you to print all labels at once.
Every one of these now reports back what it did, so an action that changed nothing says so instead of quietly returning you to the same page.
2. DHL Workflow: Create & Print throughout the day¶
For providers like DHL, the workflow is designed to allow you to create and print labels continuously throughout the day without immediately finalizing a manifest/order.
Step-by-Step Procedure¶
A. Create Items and Print Labels (Repeatedly)¶
- Process your WooCommerce orders as usual.
- When you generate a label, a "Single Item" is created in the provider's system (e.g., DHL).
- Go to the Warehouse page.
- Locate the active batch and click Build bundle then Download to print your individual shipping labels.
- You can repeat this process as many times as needed throughout the day for each new shipment.
B. Finalize the Day's Shipments (Create Order)¶
Once you are done for the day and want to hand over the packages to the carrier: 1. Scroll to the Recent Shipment Orders section in the Warehouse. 2. Find the open shipment order for the provider. 3. Click Finalize. This "assembles" all the single items you've created throughout the day into a single "Order" or manifest in the carrier's system.
C. Print the AWB (Air Waybill)¶
- After clicking Finalize, the status will change.
- A Download AWB button will appear for that shipment order.
- Download and print the AWB/Manifest to be signed by the driver upon pickup.
D. Print the stop note¶
Every bundled DHL shipment has to be accompanied by a stop note. It is the same document each time, so it sits in the Others panel at the foot of the Warehouse page as Stop note (DHL). Open it, print it and attach it to the bundle.
If your shop uses its own stop note, point the button at it with the subscribed_shipping/stop_note_url filter:
add_filter( 'subscribed_shipping/stop_note_url', function () {
return 'https://example.com/wp-content/uploads/our-stop-note.pdf';
} );
Summary of DHL Workflow¶
- Create Single Item: Triggered when requesting a label for a WooCommerce order.
- Get Label: Print the individual shipping label from the Batches section.
- Repeat: Do this for all packages.
- Create Order (Finalize): Done once at the end of the day to group all items.
- Get AWB Label: Print the final paperwork for the carrier.
- Stop note: Print it from the Warehouse page and attach it to the bundled shipment.
Appendix: Allow re-print from the CLI¶
The Allow re-print action on the order edit page is also available as a WP-CLI command, so a whole batch can be reset in one go. It removes the _flag_printed flag, moves the order back to processing and adds a private order note — exactly like the admin action.
Orders without the print flag are skipped. Order status does not block the action, so always do a dry run first and check the reported statuses.
# Preview a whole batch (batch id is shown in WooCommerce > Warehouse)
wp shipping allow-reprint --batch-id=<batch> --dry-run=1 --verbose=1
# Run it for real
wp shipping allow-reprint --batch-id=<batch> --yes
# Or for specific orders
wp shipping allow-reprint --ids="1234,1235"
Run wp help shipping allow-reprint for the full list of options.
Appendix: Version and setup at a glance¶
WooCommerce > Status > System status has a DAO Shipping section showing which version of the package a site runs and how it is wired up. It is part of the normal report, so it comes along when you click Get system report and paste the output into a support ticket.
| Row | What it tells you |
|---|---|
| Package | The Composer package, barberklingen/package-dao-shipping |
| Version | The installed version, e.g. 3.2.0 — or dev-master (a1b2c3d) on a branch install, where the commit is what tells two deploys apart |
| Database version | The migration version the shipping tables are on. Lagging behind a deploy means the migrations have not run — deactivate and reactivate the plugin |
| DAO, GLS, DHL, DHL eConnect | Whether the site has been handed credentials for that carrier |
| DHL eConnect environment | Sandbox or production |
| DHL routed through | Which of the two DHL integrations labels are actually created with |
The version is resolved by base-plugin, which reads it from Composer rather than from a hardcoded constant — so it cannot drift from what is installed.
Sites can add their own rows through the subscribed_shipping/system-status/rows filter.