Partial Shipment for WooCommerce
Record how much of each WooCommerce order item has shipped, keep the order status in step and show customers what is on its way, without splitting the order.
Version 3.8 WooCommerce plugin Free plugin Requires WordPress 6.5 Requires PHP 7.4 Tested up to 7.1 Updated 6 Oct 2026
1. Overview
Partial Shipment for WooCommerce lets you record how much of each order item has shipped, without splitting or editing the order. You open an order, click Shipment, set the shipped quantity of each item and save. The plugin then shows a badge next to every item (Shipped, Partially Shipped, Not Shipped or Refunded), moves the order to the right status, and lets you email the customer a list of what has shipped.
It is for shops that sometimes ship an order in parts: items out of stock or on backorder, items from different suppliers, or orders that need more than one parcel. It records quantities only. It does not record tracking numbers, carriers or parcels; the paid Advance Partial Shipment for WooCommerce does.
This page describes version 3.8 of the free plugin.
How it works
- Open an order and click Shipment under the order items (or the pencil icon of one item).
- In the popup, set the shipped quantity of each item, or click Ship everything, and click Save shipment.
- The order status follows the total: Partially Shipped while some items are still to ship, Completed once everything has shipped. Both are switchable.
- Each item gets a badge on the order screen, in the order preview on the Orders list and on the customer's order page.
- When you want, choose Partial shipment notification under Order actions to email the customer which items have shipped.
At a glance
One popup, one save
A quantity stepper for every item, a progress summary, product image and SKU, "Ship everything" and "Clear all", and one Save button. Changed rows are highlighted with an undo.
Order status follows
Optional "Partially Shipped" status and optional automatic completion. Pending payment, cancelled, refunded and failed orders are never moved.
Refund and virtual aware
Refunded quantities no longer count as "to ship". Virtual items need no shipping, so an order completes when its physical items have shipped.
Badges for customers
Shipped, Partially Shipped, Not Shipped and Refunded badges with quantities on the customer's View Order page.
A manual email
"Partial shipment order": every item with its shipment status. You send it from Order actions; it is never sent automatically.
Existing orders
One click creates shipment records for older orders of the statuses you choose, in batches of 50, in the background on larger stores.
How the three plugins fit together
Three WpExperts Hub plugins work with the same shipment data. Each of the three documentation pages carries this same section, so you can read it on whichever page you start from.
| Plugin | Plugin folder | Needs | What it does on its own |
|---|---|---|---|
| Partial Shipment for WooCommerce (the free plugin) | wc-partial-shipment | WooCommerce | Records how many units of each order item have shipped. It has no tracking numbers, providers or shipment statuses. It adds item badges, the optional "Partially Shipped" order status, automatic completion and one email that you send by hand. |
| Advance Partial Shipment for WooCommerce (Advance, paid) | wphub-partial-shipment | WooCommerce | Splits an order into parcels. Each parcel has its own items, provider, tracking number, status, dates and notes, and its own customer emails. It also adds a tracking page, a Fulfillment Report, a REST endpoint and webhooks. |
| Advance Partial Shipment Extension for WP All Import (the add-on, paid) | wpai-shipment | Advance, WP All Import | Nothing without Advance. With Advance it imports parcels from a CSV or XML file through WP All Import. The Plugins screen lists it as "Advance Partial Shipment — WP All Import Add-On". |
Shared data
The free plugin and Advance keep their records in the same two database tables, partial_shipment and partial_shipment_items (each with your WordPress table prefix, for example wp_partial_shipment). They also share the order status wc-partial-shipped ("Partially Shipped"), the WooCommerce settings tab wxp_partial_shipping_settings (shown as Partial Shipment) and three option keys: partially_shipped_status, partially_auto_complete and partially_enable_status_popup. A value you save with one of the two plugins is the value the other one reads.
| Data | Free plugin | Advance | Add-on |
|---|---|---|---|
Rows in partial_shipment | One row per order, always with shipment_id 1 and no tracking number. | One row per parcel. shipment_id counts 1, 2, 3 within the order. Tracking number, provider link, status, dates and notes belong to the parcel. | None of its own. It asks Advance to create or update parcels. |
Rows in partial_shipment_items | One row per order item, holding the total quantity shipped. | One row per item in each parcel. | None of its own. |
| Creating the tables | Creates both tables with a unique key on order_id, so one row per order. | Creates them when missing. On upgrade it removes that unique key and adds the columns for status, dates, notes and email tracking. | Creates no tables. |
Only one of the free plugin and Advance runs at a time
If both are active, the free plugin does nothing. When its file loads, the free plugin checks whether Advance (wphub-partial-shipment/wphub-partial-shipment.php) is active, on the current site or network-wide. If it is, the free plugin registers none of its screens, settings or hooks. Advance also switches the free plugin off. On the next request to wp-admin it silently deactivates wc-partial-shipment/woocommerce-partial-shipment.php and shows a one-time notice. On multisite, WordPress 7.1.2 deactivates it this way only when it is network-activated. A copy that is activated on a single site stays active but idle, and Advance still shows its "was deactivated" notice on each wp-admin page of that site until you deactivate the free plugin yourself. Neither step deletes shipment data. Deactivating Advance later does not switch the free plugin back on; activate it yourself on the Plugins screen.
Switching between the two
From the free plugin to Advance. Activate Advance. It keeps the existing rows, so every order the free plugin recorded now has one parcel, Shipment #1, with no provider and no tracking number. The free plugin stores no shipment status, so that parcel shows as Ready (as "Ordered" on the customer's order page) until you change it. On activation Advance also changes the tables: it removes the unique key on order_id so an order can have several parcels, removes the old shipment_primary_id column and adds the new columns. Advance can also create Delivered parcels for older Completed orders in the background; that one-time run is on by default in Advance.
From Advance back to the free plugin. Deactivate Advance, then activate the free plugin. It adds up each item's quantity over all parcels and shows that total in its Shipment popup and badges. It ignores tracking numbers, providers, statuses and notes, and leaves them in the table. When you save new quantities in the free plugin's popup, the difference is applied to the order's first parcel. When a total is lowered, the most recent parcels are reduced first.
What the add-on needs
The add-on works only together with Advance and WP All Import. It does not work with the free plugin, because it creates and updates parcels through Advance, and the free plugin has no parcels, tracking numbers or statuses. The add-on names Advance in its Requires Plugins header, so WordPress 7.1.2 refuses to activate it while Advance is missing or inactive. An add-on that is already active switches itself off on the next request to wp-admin and shows a notice.
What it does not do
- It has no tracking numbers, tracking links, carriers or parcels, no shipment statuses such as Picked or Delivered, and no shipment dates or notes. It records one number per item: how many units have shipped in total.
- It sends no email by itself. The customer email goes out only when you choose it from Order actions.
- It has no tracking page, no report, no REST endpoint or webhooks, no bulk action on the Orders list and no packing slips.
- It does not split an order into several orders.
- It contacts no outside server and sets no cookies.
The table shows the differences from Advance that matter in daily use. Both were checked in the code of each plugin.
| Topic | Free plugin | Advance |
|---|---|---|
| What is recorded | The total shipped quantity of each item. | Parcels, each with items, provider, tracking number, status, dates and notes. |
| Completing an order by hand | Marks every item as shipped. | Does not mark anything as shipped. |
| "Partially Shipped" and payment | Added to WooCommerce's paid statuses, and allows downloads on the same terms as Processing. | Not added to the paid statuses. |
| Clearing every shipped quantity | A Partially Shipped or Completed order goes back to Processing. | Only a Partially Shipped order goes back to Processing. |
| Pending payment orders | Never changed. | New shipments are refused on them; edits and deletions on an existing shipment can still change their status. |
| Customer email | One email, sent by hand. | Two emails, sent automatically. |
| Badge labels | Fixed words, changeable with a filter only. | Four labels you can edit in the settings. |
2. Requirements
| Item | Requirement | Notes |
|---|---|---|
| WordPress | 6.5 or later | From the Requires at least header. Tested up to 7.1. |
| PHP | 7.4 or later | From the Requires PHP header. |
| WooCommerce | 8.0 or later, tested up to 11.1 | Required. The header says Requires Plugins: woocommerce, so WordPress will not let you activate the plugin without it. To find WooCommerce, and later Advance, the plugin applies WordPress's active_plugins filter to the list of active plugins (and, on multisite, reads the network-wide list). If WooCommerce is not active (for this site, or network-wide on multisite) the plugin loads nothing and shows no message. |
| Order storage | High-Performance Order Storage or legacy storage | The plugin declares compatibility with custom_order_tables, cart_checkout_blocks and product_block_editor. It reads and writes orders only through the WooCommerce order API and adds nothing to the cart or checkout. |
| Action Scheduler | Optional (bundled with WooCommerce) | Runs the later batches of the backfill tool in the background. Without it the batches run one after another in the request that started the backfill. |
| User permission | manage_woocommerce | Needed for the three popup requests and the backfill. WooCommerce gives it to Administrators and Shop managers. |
| Working WooCommerce emails | Needed for the customer email | The email is a standard WooCommerce email. |
| Advance Partial Shipment | Not compatible at the same time | If Advance is active, this plugin stays idle. See How the three plugins fit together. |
3. Installation
- Open Plugins → Add New Plugin, search for "Partial Shipment for WooCommerce", then click Install Now and Activate. WooCommerce must be active. You can also upload the plugin zip file under Plugins → Add New Plugin → Upload Plugin.
- Open WooCommerce → Settings → Partial Shipment to choose the order status options and where the badges show. A Settings link (and a Get Pro link to the Advance plugin's page) also appears under the plugin name on the Plugins screen.
- Open an order and click Shipment under the order items to record what has shipped.
- For orders you shipped before installing, use Backfill orders now on the settings screen (see Backfill existing orders).
What activation creates
- Two database tables,
partial_shipmentandpartial_shipment_items(with your table prefix), if they do not exist yet. See Database tables. - One option,
wxp_partial_shipment_db_version, holding the plugin version (3.8) so that later updates know when to run the table upgrade. - No roles, pages, capabilities or scheduled events. Background jobs appear only while a backfill runs.
Updating
Update through the normal WordPress screens. On every request WordPress loads the plugin, it compares the stored version with the current one and, if they differ, runs the table check again. That check adds the index on partial_shipment_items.shipment_id when it is missing and gives the legacy shipment_primary_id column a default value when it has none. Existing records and settings are kept.
Multisite
The plugin loads when WooCommerce is active for the current site or network-wide. The tables use each site's table prefix, so every site has its own shipment records. Each site creates its tables the first time the plugin runs on it (the version check described above does this). Settings are stored per site.
Deactivating and deleting
Deactivating cancels a backfill that is queued or running (records already created stay). It deletes no data. The plugin has no uninstall routine, so deleting it from the Plugins screen removes only its files: the two tables and the options listed under Options stay in your database until you remove them yourself.
4. Quick start
- Activate the plugin (WooCommerce must be active).
- Open WooCommerce → Settings → Partial Shipment. The defaults are all on. Decide whether you want the "Partially Shipped" status and automatic completion.
- Open an order. Under the order items click Shipment.
- Type how many units of each item have shipped, or click Ship everything, then click Save shipment.
- Check the order status and the badges next to each item.
- Optional: in the Order actions box choose Partial shipment notification from the list and click Apply to email the customer.
- Optional: for older orders open the settings tab again and run Backfill orders now.
5. Features
Where a feature depends on WordPress or WooCommerce code, this page names the version that was checked (WordPress 7.1.2 and WooCommerce 11.1.2).
The Shipment popup
On an order edit screen, under the order items, next to Refund, there is a Shipment button. Every product line also gets a pencil icon (its column is named "Manage Shipment" for screen readers). The button opens the popup for the whole order. The pencil opens the same popup for that one item.
- Title. "Order #123 shipment".
- One row per product line. A 40 px product image, the name, a line with the SKU, the ordered quantity and the refunded quantity ("SKU: TSHIRT · Qty 5 · 1 refunded"), the item's badge, and a quantity stepper. The stepper has minus and plus buttons and a number box with the maximum next to it ("2 / 4"). The maximum is the ordered quantity minus the refunded quantity. You can also type the number.
- Locked rows. Virtual items show "No shipping needed" with the note "Virtual item". Fully refunded items show "Fully refunded". Locked rows cannot be changed.
- Summary (whole-order popup only). A line such as "3 of 7 units shipped", a chip ("Not shipped", "Partially shipped", "Fully shipped" or "Nothing to ship") and a progress bar. It mirrors what the order status will do: virtual and fully refunded items do not count.
- Changed rows are highlighted and show an undo button ("Undo change (was 2)"). "Unsaved changes" appears next to the summary.
- Ship everything and Clear all set every editable row to its maximum or to zero. They appear only in the whole-order popup and only when there is more than one row.
- Cancel, the close button, the Escape key and a click outside the popup all close it without saving.
- Save shipment stays disabled until you change something. Press Enter in a quantity box to save. While saving it reads "Saving…".
The quantities are totals, not parcels: you enter how many units have shipped so far. Entering a lower number than before reduces the shipped total. Only the rows you changed are sent. The server checks every row again: only product lines of that order are accepted, and each quantity is held between 0 and the net quantity (ordered minus refunded).
When you save, the popup closes, the order items table reloads (so the badges update) and the order status field in the Order details box changes to the status the plugin has just set. If saving or loading fails, for example because the page was left open until the security token expired, the popup stays open (or opens) with a message: "The shipment could not be saved. Please try again." or "The shipment could not be loaded or saved. Please reload the page and try again."
Shipment badges
Each product line gets a badge with a label, a dash and a number. Labels are fixed words (change them with the wxp_partial_shipment_labels filter, see Filters).
| Badge | When it shows | Number |
|---|---|---|
| Shipped | The shipped quantity has reached the net quantity. Virtual items always show Shipped. | The shipped quantity (for a virtual item, the net quantity). |
| Partially Shipped | Something has shipped, but less than the net quantity. | The shipped quantity. |
| Not Shipped | Nothing has shipped. | The quantity still to ship (the net quantity). |
| Refunded | The whole ordered quantity is refunded. | The ordered quantity. |
The link around each badge has the title "Label: N/total" (N is the number on the badge) and the badge text inside it has the title "Label", so a browser may show either when you hover. Badges appear in three places.
- On the order screen, in two new columns of the order items table: Shipment Status (the badge) and the pencil icon column.
- In the order preview popup on the Orders list, in a new Status column. Controlled by Orders list preview.
- On the customer's View Order page, under each product name. Controlled by Hide until first shipment. See What customers see.
Order statuses and automatic completion
The plugin can add an order status, Partially Shipped (wc-partial-shipped), and can complete an order once everything has shipped. After you save the Shipment popup, the plugin compares the shipped quantities with the net quantities of the physical items (virtual items are ignored; refunded units are not counted) and then acts as follows.
| Situation | What happens |
|---|---|
| The order is Pending payment, Cancelled, Refunded, Failed, a checkout draft or in the trash | Nothing, ever. In particular an unpaid order is never moved to Partially Shipped or Completed, which count as paid statuses. |
| No physical quantity is left to ship (all virtual or fully refunded) | Nothing. |
| Everything has shipped and Auto-complete when fully shipped is on | The order becomes Completed, if it is not already. The order note reads "Order Completed by Woocommerce Partial Shipment." |
| Everything has shipped and auto-complete is off | Nothing. A Partially Shipped order stays so until you complete it yourself. |
| Part has shipped | The order becomes Partially Shipped ("Order Partially Shipped by Woocommerce Partial Shipment."), if Partially Shipped status is on and the order is not already in it. This applies to orders in any other status that is not in the first row, including Processing, On hold and Completed. |
| Nothing is shipped (you cleared every quantity) | A Partially Shipped or Completed order goes back to Processing ("Order Processed by Woocommerce Partial Shipment."). Processing and On hold orders stay as they are. |
The check also runs after a refund on a Partially Shipped order that has shipment records: when the refunded units were the ones still waiting to ship, the order is now fully shipped and, with auto-complete on, becomes Completed. A refund on any other order does not trigger it.
- Partially Shipped counts as paid. The plugin adds the status to WooCommerce's list of paid statuses (
woocommerce_order_is_paid_statuses), so paid-order checks that other code makes with that list include it. It also allows downloads while an order is Partially Shipped, on the same terms as Processing: only when WooCommerce's Grant access to downloadable products after payment setting is on (WooCommerce 11.1.2). - WooCommerce emails still apply. When the plugin moves an order to Completed, WooCommerce sends its usual Completed order email (if you have it enabled), because the status change is made through the normal WooCommerce order API.
- The status can be switched off. With Partially Shipped status off, the status does not exist and no order is moved to it. Orders that already have it are not changed by switching it off.
Completing an order by hand
When an order reaches the Completed status, however it gets there (you set it, a payment or fulfilment plugin sets it, or this plugin's auto-complete sets it), the plugin marks every item of the order as shipped, up to its net quantity, and flags the order as having shipment records. This is why an order you complete without using the popup still shows "Shipped" badges to the customer. Items that are virtual are included in this step.
Refunds and virtual items
- Refunded quantities are taken off the quantity to ship. An item whose whole quantity is refunded shows Refunded and cannot be edited in the popup.
- Virtual items need no shipping. They are left out of the status calculation, so an order is complete once all its physical items have shipped. A line whose product was deleted after the order was placed is treated as physical.
- A refund after shipping. The shipped quantity is capped at the net quantity wherever it is used, so a refund can never leave an order "over-shipped".
The "Partial shipment order" email
The plugin adds one customer email to WooCommerce, Partial shipment order (customer_partial_shipment). It is enabled by default and never sent automatically.
- Open the order. In the Order actions box choose Partial shipment notification in the "Choose an action..." list and click Apply.
- The email goes to the order's billing email address. An order note records the result: "Partial order details manually sent to customer." or, when the email was not sent, "Partial shipment email was not sent. Check that it is enabled under WooCommerce > Settings > Emails and that the order has a billing email address."
- Defaults. Subject "Your {site_title} order #{order_number} has been partially shipped". Heading "Your partially shipped order details". You can change them, the additional content and the email type (HTML, plain text or multipart) under WooCommerce → Settings → Emails.
- Content. "Hi {first name}," and "Just to let you know — your order #123 has been partially shipped:", then a table with every order line: product (with item options), the ordered quantity, the item's shipment status ("Shipped X 2", "Partially Shipped X 1", "Not Shipped X 3" or "Refunded X 1") and the line price, followed by the order totals and the customer's order note. WooCommerce's usual order meta and customer details, your additional content and "Thanks!" follow. The SKU is shown to admins only, not to the customer.
- Plain text carries the same information.
- The status words in the email are fixed text. They do not follow the
wxp_partial_shipment_labelsfilter.
Backfill existing orders
The plugin only knows about shipments saved after it was installed. For orders that shipped earlier, the backfill tool creates shipment records that mark every item of the order as shipped.
- Open WooCommerce → Settings → Partial Shipment. In the Backfill existing orders card choose the Order statuses (Completed is preselected).
- Click Backfill orders now. The button uses the statuses currently selected in the box, even if you have not saved the settings.
- The first batch of 50 orders runs at once. The rest continue in the background with Action Scheduler. While it runs the button reads "Backfill running…" with the counts so far. When it finishes, a notice says "Partial Shipment: backfilled N order(s) with status "..."; N already had shipment records and were skipped." and the card shows "Last run ...".
- Orders that already have a shipment record are skipped, so the tool is safe to run again and never overwrites your edits.
- Quantities are net of refunds. Orders are processed in ascending order id.
- It does not change any order status. It does mark the order as "has shipments", which makes the badges visible to customers when Hide until first shipment is on.
- Clicking while a run is in progress does not start a second run. A run that has not moved for 30 minutes (for example because Action Scheduler stopped) counts as abandoned, and a new click starts over.
- If you run the tool with no statuses selected, Completed is used.
What customers see
On My Account → Orders → View, each product line shows the shipment badge under its name. With Hide until first shipment on (the default), the badges stay hidden until a shipment has been recorded for the order. A shipment counts as recorded after you save the Shipment popup, after the order becomes Completed, or after the backfill has processed the order. With the setting off the badges are always shown, so a new order starts with "Not Shipped" badges.
Badges appear only on the View Order page (not on the order received page or in the Orders list of My Account). The plugin's stylesheet loads only on My Account pages. The customer can also receive the "Partial shipment order" email described above.
Using it with Advance
The free plugin and Advance Partial Shipment for WooCommerce share one set of tables, one order status and three settings, and only one of them runs at a time. What happens to your records when you switch is described in How the three plugins fit together.
6. Settings
All settings are on one screen: WooCommerce → Settings → Partial Shipment (it needs manage_woocommerce). The screen opens with a header card (the plugin name and version, short text, links to the plugin's documentation page and to the support forum, and a counter of Partially Shipped orders with a "View orders" link), followed by one card per group. Checkboxes are shown as on/off switches. Click Save changes at the bottom to save.
Three of the keys below (partially_shipped_status, partially_auto_complete and partially_enable_status_popup) are shared with the paid Advance plugin and keep their values when you switch between the two. partially_hide_status is read only by the free plugin.
Order status
How the order status follows the shipment.
| Setting | Key | Default | What it does |
|---|---|---|---|
| Partially Shipped status | partially_shipped_status | On | Adds a "Partially Shipped" order status (wc-partial-shipped), used while only some items have shipped. Allowed values yes or no. When off, no order is moved to it, and orders that already have it are not changed. |
| Auto-complete when fully shipped | partially_auto_complete | On | Moves the order to Completed as soon as every item has shipped. |
Shipment badges
Each order item gets a badge that shows how much of it has shipped. A Preview row shows the four badges exactly as they render on orders (Shipped - 2, Partially Shipped - 1, Not Shipped - 3 and Refunded - 1).
| Setting | Key | Default | What it does |
|---|---|---|---|
| Hide until first shipment | partially_hide_status | On | On the customer's View Order page, show the badges only once a shipment has been saved for the order. Off shows them always. |
| Orders list preview | partially_enable_status_popup | On | Shows the badges in the order preview popup on the Orders screen (adds a Status column to it). |
Notification email
Tells the customer which items have shipped and which are still to come.
| Setting | Key | Default | What it does |
|---|---|---|---|
| Partial shipment email | (display only) | - | Shows whether the email is Enabled or Disabled, its format (HTML, plain text or multipart) and a Manage email button to its WooCommerce settings. The note beside it says the email is sent when you choose "Partial shipment notification" under Order actions on an order. |
Backfill existing orders
Creates shipment records for orders placed before this plugin was active. Refunded quantities are excluded, and orders that already have shipment records are skipped.
| Setting | Key | Default | What it does |
|---|---|---|---|
| Order statuses | wxp_backfill_status | Completed (wc-completed) | A multi-select of every order status. Orders with these statuses and no shipment record yet have all their items marked as shipped. |
| Run | (button) | - | Backfill orders now starts the run with the statuses currently selected, saved or not. While a run is active the button reads "Backfill running…" with the counts so far and a Refresh link. Afterwards the card shows "Last run [date] for "[statuses]": N backfilled, N skipped." or "Not run yet." Orders are processed in batches of 50. |
The saved selection only sets what the box shows when you open the screen. The button always sends the current selection.
7. Screens
| Screen | Path | What is there |
|---|---|---|
| Order edit screen | WooCommerce → Orders → (an order) | The Shipment button under the order items, the Shipment Status and pencil columns in the items table, and Partial shipment notification in the Order actions list. |
| Orders list | WooCommerce → Orders | A "Partially Shipped" status filter (when the status is on) and badges in the order preview popup. |
| Settings | WooCommerce → Settings → Partial Shipment | The order status, badge, email and backfill options. |
| WooCommerce → Settings → Emails → Partial shipment order | Enable, subject, heading, additional content and email type. | |
| Plugins screen | Plugins | Links under the plugin name: Settings and Get Pro. |
| Customer order page | My Account → Orders → View | The badges. |
8. Developer reference
Everything here was taken from the plugin's code (version 3.8). The plugin has no shortcodes, blocks, REST routes, WP-CLI commands, cron events or capabilities of its own.
AJAX and admin-post actions
All three AJAX actions are wp_ajax_ only (logged-in users) and need manage_woocommerce. They share one nonce, action wxp_check_{order_id}, sent in the field wxp_check. A request without the capability answers {"valid":false}; a bad nonce stops with the usual WordPress response. The two read actions return a fresh check value for the next request.
| Action | POST fields | Reply |
|---|---|---|
wxp_order_shipment | order_id, wxp_check | { order_id, order_number, valid, products, init, check }. products has one entry per product line: id, item_id, name, sku, image, virtual, ordered, refunded_qty, qty (net), shipped, refunded, order_id. init says whether any shipment data exists. |
wxp_order_item_shipment | order_id, item_id, wxp_check | The same, for one item that must belong to that order. |
wxp_order_set_shipped | order_id, wxp_check, shipped[] (a list of { item_id, shipped, type }; type is shipped or not-shipped, the latter meaning 0) | { order_id, status }, where status is the order status after the update, with the wc- prefix for registered statuses. Items that are not product lines of the order are ignored. Each quantity is held between 0 and the net quantity. |
The admin-post action wxp_backfill_shipments (GET) starts the backfill. It needs manage_woocommerce and the nonce action wxp_backfill_shipments in the field wxp_backfill_nonce. The optional wxp_backfill_status holds order status keys with the wc- prefix, comma-separated; unknown keys are dropped and an empty list means wc-completed.
Actions
| Action | Parameters | When it fires |
|---|---|---|
wxp_order_status | $order_id | Fired after the Shipment popup is saved. The plugin listens at priority 10 and updates the order status. You can fire it yourself to re-run the status check for an order. Also fired after a refund on a Partially Shipped order that has shipment records. |
woocommerce_email_partially_shipped_order_details | $order, $sent_to_admin, $plain_text, $email | Inside both email templates, where the items table is printed. The plugin listens at priority 10. |
Filters
| Filter | Arguments | What it changes |
|---|---|---|
wxp_partial_shipment_labels | $labels (keys shipped, not-shipped, partially-shipped, refunded) | The badge labels on the order screen, in the popup, in the order preview and on the customer's page. Applied on init, so add your filter before that. It does not change the words in the email. |
wxp_partial_shipment_settings | $settings (keys partially_shipped_status, partially_auto_complete, partially_hide_status, partially_enable_status_popup; values yes or no) | The four on/off values the plugin works with, after the options are read. It overrides the saved options at run time without changing them. |
wxp_partial_shipping_settings | $settings | The settings fields array of the settings screen. A field you add after the last section lands in its own untitled card. |
wxp_backfill_batch_size | $size (default 50) | Orders per backfill batch. Values below 1 count as 1. |
// Rename the badges (add this before the init action runs).
add_filter( 'wxp_partial_shipment_labels', function ( $labels ) {
$labels['shipped'] = 'Sent';
return $labels;
} );
// Never complete orders automatically, whatever the setting says.
add_filter( 'wxp_partial_shipment_settings', function ( $settings ) {
$settings['partially_auto_complete'] = 'no';
return $settings;
} );
// Smaller backfill batches.
add_filter( 'wxp_backfill_batch_size', function () {
return 20;
} );
// Re-run the status check for order 123.
do_action( 'wxp_order_status', 123 );
Functions and methods
wxp_partial_shipment_init() returns the plugin object (class WXP_Partial_Shipment). Its public methods are not a stable API, but these are the ones the plugin itself uses everywhere.
| Method | Returns |
|---|---|
get_wxp_shipment_data( $order_id ) | Item id => array( 'item_id' => ..., 'item_qty' => total shipped ), summed over every shipment row of the order. |
wxp_set_item_shipped_qty( $order_id, $item_id, $qty ) | Nothing. Stores the new total shipped quantity of one item. |
wxp_get_item_net_qty( $order, $item_id, $ordered ) | Ordered minus refunded quantity, never below 0. |
get_item_ship_state( $item, $order ) | array( 'state' => shipped|partial|refunded|not, 'shipped' => n, 'total' => n ) |
get_badge_html( $state, $count, $total ) | The badge markup. |
Templates and override paths
The email templates are loaded with wc_get_template(). In WooCommerce 11.1.2 that looks in the active theme (and child theme) under woocommerce/ first and then directly under the theme root, and falls back to the plugin's file. Copy a file from the plugin folder to the matching path under your theme.
| Plugin file | Copy to |
|---|---|
emails/customer-partial-shipment.php | yourtheme/woocommerce/emails/customer-partial-shipment.php |
emails/plain/customer-partial-shipment.php | yourtheme/woocommerce/emails/plain/customer-partial-shipment.php |
emails/email-partial-order-details.php and emails/plain/email-partial-order-details.php | yourtheme/woocommerce/emails/... (same sub-path) |
emails/email-partial-order-items.php and emails/plain/email-partial-order-items.php | yourtheme/woocommerce/emails/... (same sub-path) |
The items template receives the arguments of WooCommerce's own woocommerce_email_order_items_args filter, and its output passes through woocommerce_email_order_items_table.
Database tables
Both tables are created with CREATE TABLE IF NOT EXISTS, using your table prefix and the site's character set. The free plugin writes only the columns below. Advance adds more columns to the same tables; see How the three plugins fit together.
partial_shipment (one row per order)
| Column | Type | Meaning |
|---|---|---|
id | bigint(20), auto increment, primary key | The row id. |
order_id | bigint(20), unique key | The WooCommerce order. The unique key means one row per order when this plugin created the table. |
shipment_id | bigint(20) | Always 1 in rows written by this plugin. |
shipment_url | varchar(300) | Always empty in rows written by this plugin. |
shipment_num | varchar(100) | Always empty in rows written by this plugin. |
shipment_date | varchar(30) | A timestamp of when the row was created. |
partial_shipment_items (one row per item)
| Column | Type | Meaning |
|---|---|---|
id | bigint(20), auto increment, primary key | The row id. |
shipment_id | bigint(20), indexed | The partial_shipment.id it belongs to. |
shipment_primary_id | bigint(20), default 1 | A legacy column that is not used. Advance removes it. |
item_id | varchar(30) | The WooCommerce order line item id. |
item_qty | int(20) | The total quantity of the item shipped so far. |
Options, order meta, jobs and constants
| Name | Kind | Purpose |
|---|---|---|
partially_shipped_status, partially_auto_complete, partially_hide_status, partially_enable_status_popup | Options | The settings (yes or no; unset counts as yes). |
wxp_backfill_status | Option | The statuses chosen for the backfill (array of wc- keys). |
wxp_partial_shipment_db_version | Option | The plugin version at the last table check. |
wxp_backfill_job | Option | The run in progress: run id, statuses, offset and counters. Deleted when the run ends or the plugin is deactivated. |
wxp_backfill_notice | Option | The result of a finished run, shown once and then deleted. |
wxp_backfill_last | Option | Summary of the last finished run, shown on the settings screen. |
_init_wxp_shipment | Order meta | Value 1 once an order has shipment records (set when the popup is saved, when the order is Completed and by the backfill). Controls Hide until first shipment. |
wxp_partial_shipment_backfill_batch, group wc-partial-shipment | Action Scheduler action | One backfill batch; the run id is its argument. |
WXP_PARTIAL_SHIP_VER, WXP_PARTIAL_SHIP_DIR | Constants | The version (3.8) and the plugin folder path. |
The plugin sets no cookies and no transients, and adds no capabilities, roles or scheduled events.
WordPress and WooCommerce hooks the plugin attaches to
| Hook | Priority | What the plugin does |
|---|---|---|
woocommerce_order_status_completed | 10 | Marks every item as shipped (see Completing an order by hand). |
woocommerce_order_refunded | 20 | Re-checks a Partially Shipped order. |
woocommerce_order_is_paid_statuses | 10 | Adds partial-shipped to the paid statuses. |
woocommerce_order_is_download_permitted | 10 | Lets a Partially Shipped order download when "Grant access to downloadable products after payment" is on. |
wc_order_statuses | 10 | Adds "Partially Shipped" when the setting is on. |
woocommerce_order_item_meta_end | 999 | Prints the badge on the customer's View Order page. |
woocommerce_order_item_add_action_buttons | 10 | Prints the Shipment button. |
woocommerce_admin_order_item_headers, woocommerce_admin_order_item_values | 10 | The two extra columns of the order items table. |
woocommerce_admin_order_preview_line_item_columns | 10 | The Status column of the order preview. |
woocommerce_order_actions, woocommerce_order_action_wxp_partial_shipment | 10 | The "Partial shipment notification" order action and its handler. |
woocommerce_email_classes | 10 | Registers the email class. |
init | 10, 999 | Autoloader, settings and labels (10); registering the order status (999). |
plugins_loaded | 10 | The table version check. |
File layout
woocommerce-partial-shipment.php: plugin header, the plugin class, the Advance detection and the loader.classes/wxp-partial-shipment-settings.php: the settings tab.classes/wxp-partial-shipment-sql.php: tables and upgrade.inc/class-wc-email-partial-shipment.php: the email class.emails/andemails/plain/: the email templates.assets/js/modal.js(a small dialog helper) andassets/js/admin-script.js(the popup),assets/js/admin-settings.js, and the stylesheets inassets/css/.languages/wc-partial-shipment.pot: the translation template (text domainwc-partial-shipment).
9. Privacy
What is stored and where
- Shipment tables.
partial_shipmentandpartial_shipment_itemsin your own database hold, per order, the order id, the item ids, the quantity of each item that has shipped, and the time the record was created. They hold no customer name, email address or postal address; those stay in the WooCommerce order. - Order data. One order meta value,
_init_wxp_shipment, marks an order as having shipment records. When the plugin changes an order status or sends its email, WooCommerce adds the usual order note. - Options. The four settings, the backfill selection, the plugin version and the state of the backfill. They are listed under Options, order meta, jobs and constants.
- Where it is shown. Badges appear to administrators in wp-admin and to the logged-in customer on their own View Order page. The "Partial shipment order" email goes to the order's billing email address and contains the order's items, prices, totals and the customer's order note, as other WooCommerce order emails do.
Cookies and other servers
The plugin sets no cookies and no transients. It sends no data to external services, makes no outside requests and loads no external scripts, fonts or images. The two links in the settings header (documentation and support forum) open other websites only when you click them.
Retention, deactivation and deletion
- Shipment records stay until you remove them. The plugin has no retention setting and no clean-up job.
- Deactivating cancels a backfill in progress. It deletes no data.
- Deleting the plugin removes only its files. There is no uninstall routine, so the two tables, the options and the order meta stay in the database. Remove them yourself if you want them gone, after a backup. The tables are shared with the paid Advance plugin, so do not delete them if you use or plan to use it.
- The plugin registers no personal data exporter or eraser and suggests no privacy policy text. Its tables contain no personal data about customers.
10. Troubleshooting
| Problem | Likely cause and fix |
|---|---|
| There is no Shipment button and no Partial Shipment tab in the settings. | Either WooCommerce is not active, or the paid Advance plugin is active. When Advance is active this plugin registers nothing, and Advance switches it off on its next wp-admin request. Check the Plugins screen. See How the three plugins fit together. |
| The popup says "The shipment could not be loaded or saved. Please reload the page and try again." | The request failed: the page was open long enough for its security token to expire, you were logged out, you do not have manage_woocommerce, or the server returned an error. Reload the order and try again. |
| "The shipment could not be saved. Please try again." | The save request failed. The popup stays open with your changes, so click Save shipment again. If it keeps failing, check your PHP error log and any security plugin that blocks admin AJAX. |
| The Save shipment button is greyed out. | It stays disabled until you change a quantity. If every row is locked (virtual items, fully refunded items), there is nothing to save and the button is not shown. |
| The order status did not change after I saved. | Pending payment, Cancelled, Refunded and Failed orders are never moved. With Auto-complete when fully shipped off, a fully shipped order is not completed. With Partially Shipped status off, no order is moved to that status. An order with only virtual or fully refunded items has nothing to compare. |
| A Pending payment order stayed Pending payment. | By design (since 3.8). Partially Shipped and Completed count as paid, so an unpaid order is never moved to them. |
| Customers do not see badges on their order page. | With Hide until first shipment on, the badges appear only after a shipment is recorded (the popup was saved, the order became Completed, or the backfill ran for it). Badges also show only on the View Order page of My Account. |
| The customer did not receive the email. | The email is never sent automatically: use Partial shipment notification in Order actions and click Apply. Then check that the email is enabled under WooCommerce → Settings → Emails → Partial shipment order, that the order has a billing email address (the order note says so when it was not sent) and that your site can send mail. |
| The status word in the email differs from my renamed label. | The wxp_partial_shipment_labels filter changes badges only. The email's status text ("Shipped X 2") is fixed. Override the email template if you need other words (see Templates and override paths). |
| The backfill skipped orders. | Orders that already have a shipment record are skipped, and only the selected statuses are processed. The notice and the card show how many were skipped. The button uses the statuses selected in the box when you click it. |
| The backfill seems stuck on "Backfill running…". | The later batches run through Action Scheduler (Tools → Scheduled Actions, group wc-partial-shipment). If it stops moving, the run counts as abandoned after 30 minutes and a new click starts over. |
| An order went back to Processing. | All its shipped quantities were cleared. A Partially Shipped or Completed order with nothing shipped returns to Processing. |
| A customer cannot download a product while the order is Partially Shipped. | Downloads are allowed for Partially Shipped orders only when WooCommerce's Grant access to downloadable products after payment setting is on, the same condition WooCommerce applies to Processing orders. |
| Virtual items show a "Shipped" badge. | By design: virtual items need no shipping, so they always count as shipped and are left out of the order status calculation. |
| After going back from Advance, tracking numbers and statuses are not shown. | This plugin records quantities only. It adds up each item over all parcels and leaves the tracking data in the table. See How the three plugins fit together. |
11. FAQ
Does the plugin split my order into separate orders?
No. The original order stays intact. The plugin records the shipped quantity of each item and shows its status next to it.
How does the order status change?
With the Partially Shipped status enabled, the order moves to Partially Shipped while some items are still to ship. With auto-complete enabled, it moves to Completed once every item has shipped. If you clear all shipped quantities of a Partially Shipped or Completed order, it goes back to Processing. Pending payment, cancelled, refunded and failed orders are never changed.
Can I add tracking numbers?
Not in the free plugin. Tracking numbers, tracking links and shipping providers are part of Advance Partial Shipment for WooCommerce.
Is the customer emailed automatically?
No. Send the email when you want from the order screen: Order actions → Partial shipment notification, then Apply. It lists every item with its quantity and shipment status.
What happens with refunded and virtual items?
Refunded quantities are taken off the quantity to ship, and fully refunded items show a "Refunded" badge. Virtual items need no shipping, so an order is complete once all physical items have shipped.
What about orders placed before I installed the plugin?
Open WooCommerce → Settings → Partial Shipment, choose the order statuses under "Backfill existing orders" and click Backfill orders now. All items of those orders are marked as shipped; orders that already have shipment records are skipped.
Does completing an order by hand mark the items as shipped?
Yes. Whenever an order reaches Completed, every item is marked as shipped.
Can I use it together with Advance Partial Shipment for WooCommerce?
Not at the same time. Advance replaces this plugin and uses the same shipment data. When Advance is active this plugin stays idle and is deactivated on the next wp-admin request. Your records are kept and shown by Advance. If you switch back, the totals of all Advance parcels are shown and edited here. Details are in How the three plugins fit together.
Why did my Pending payment order keep its status?
Saving shipped quantities never changes an order that is still Pending payment, because Partially Shipped and Completed count as paid statuses in WooCommerce. Cancelled, refunded and failed orders are never changed either.
Can I rename the badges?
Yes, with the wxp_partial_shipment_labels filter (see Filters). There is no setting for it in the free plugin.
Does the plugin work with HPOS, the Cart and Checkout blocks and multisite?
Yes. It declares compatibility with High-Performance Order Storage and the Cart and Checkout blocks, and loads on multisite when WooCommerce is active for the site or network-wide. It is translation ready (text domain wc-partial-shipment; the plugin ships a .pot template).
Does the plugin send data anywhere or set cookies?
No. It makes no outside requests and sets no cookies. Shipment records stay in two tables of your own database.
Where can I get support?
For the free plugin open a topic in the WordPress.org support forum, or email support@wpexpertshub.com. Questions about the paid Advance plugin go to the email address, not to the WordPress.org forum.
12. Changelog
Reproduced from the plugin's readme.txt. The 3.7 entry says the redesigned popup replaces the earlier tick-rows, Bulk Actions and Update steps, so older entries that mention those describe screens that no longer exist.
3.8 - 2026-10-06
- Fix - Saving shipped quantities on an unpaid order ("Pending payment") moved it to "Partially Shipped" or "Completed", which count as paid statuses. The shipment screen no longer changes the status of a Pending payment order (it still never touches Cancelled, Refunded or Failed orders).
- Tweak - The shipped quantities of an order are read once per page instead of once per item row (faster order screens with many lines).
- Tweak - Tested with PHP 8.2 - 8.5, WooCommerce High-Performance Order Storage and legacy order storage, and the Advance Partial Shipment switch (shipment data is shared).
3.7 - 2026-09-29
- Fix - The "partially shipped" customer email showed a raw, unrendered HTML table (product name, qty, price) instead of a formatted items table, because the items table markup was escaped as text. Both the HTML and plain-text templates now output it correctly.
- Fix - Plain-text email showed raw HTML price markup and could fatal when a product had been deleted.
- Fix - Plain-text email left out the email's "Additional content" setting and printed a raw <br /> tag in the footer.
- Fix - The "Partial shipment notification" order action added a "manually sent" note even when the email was disabled or the order had no billing email; the note now reflects whether the email was really sent.
- Fix - Orders containing a virtual/downloadable item never switched to Completed automatically when every physical item was shipped (the virtual quantity was counted as shipped but not as shippable).
- Fix - A refund issued after shipping could leave the shipped total above the remaining quantity, so the order never auto-completed. Shipped quantities are now capped per item, and refunding the last unshipped units of a "Partially Shipped" order now completes it.
- Fix - Clicking Update in the Shipment popup with nothing shipped moved a Pending payment or On hold order to Processing (sending the "Processing order" email), and could also bring back a Cancelled, Refunded or Failed order. The status now only goes back to Processing from Partially Shipped or Completed, and cancelled, refunded or failed orders are never changed.
- Fix - "Partially Shipped" orders were not treated as paid: customers could not download their downloadable products while an order was partially shipped, and these orders were left out of the customer's total spent and "verified owner" review checks.
- Fix - Line items whose product was deleted after the order was placed always showed "Not Shipped" and were ignored when working out the order status.
- Fix - The shipment AJAX handlers accepted item IDs belonging to other orders (and shipping lines); only product lines of the order being edited are saved now.
- Fix - Two simultaneous requests for the same order (e.g. two admins updating the shipment at once, or the order-completed hook firing twice) could create duplicate shipment rows. Shipment-row creation now re-uses the row a concurrent request just created, and new installs enforce one row per order with a unique key.
- Fix - Running together with Advance Partial Shipment for WooCommerce: the premium plugin was detected by an outdated folder name, so both plugins could load at once (duplicate settings, hooks and database errors). This plugin now stays idle while the premium plugin is active.
- Fix - After downgrading from the premium plugin, only the first parcel of an order was counted and new shipment rows failed to save (the premium plugin removes the legacy
shipment_primary_idcolumn). Totals are now summed over all parcels and edits keep working. - Fix - On multisite, the plugin did not load when WooCommerce was activated per site instead of network-wide.
- Tweak - Redesigned Shipment popup on the order screen: a progress summary with the resulting order status, product thumbnails, SKU and refunded quantities, live status badges, a quantity stepper per item, "Ship everything" / "Clear all" shortcuts and a single "Save shipment" button (replaces the tick-rows + Bulk Actions + Update steps). Changed rows are highlighted with a one-click undo, virtual and fully refunded items are shown as not needing shipping, a failed save keeps the popup open with your changes, and Enter saves. Works on small screens and with the keyboard.
- Tweak - Redesigned settings page: a header with the number of Partially Shipped orders, settings grouped into cards (Order status, Shipment badges, Notification email, Backfill), on/off switches, a live preview of the status badges, the notification email's state with a link to its settings, and the backfill run state (running, last run). Works on small screens and follows the admin colour scheme. Option names are unchanged.
- Tweak - Backfill now runs in batches of 50 orders: the first batch runs straight away and the rest continue in the background with Action Scheduler, so large stores no longer time out. Progress is shown on the settings page, and clicking the button again during a run does not start a second one.
- Tweak - The Shipment popup no longer stays stuck behind a loading overlay when a request fails (for example after the page was left open overnight); requests are now asynchronous and show a message instead.
- Tweak - Escaped product names before inserting them into the admin Shipment popup, hardening against a stored-XSS edge case if an order item name contains HTML.
- Tweak - Added a database index on
partial_shipment_items.shipment_id, used by every shipment lookup, to keep queries fast on stores with a large order history. Existing installs get it automatically through a version-checked upgrade routine (previously schema changes only applied on a fresh activation). - Tweak - Front-end stylesheet is only loaded on My Account pages; clearer default email subject; "Status" column heading and purchase-note colspan fixed in the HTML email; email template headers now name the correct theme override paths.
- Tweak - Removed an unused localized nonce field left over from a previous refactor.
- Tweak - Only declares the WooCommerce features it supports (HPOS, Cart & Checkout blocks, product editor). Tested with WordPress 7.1 and WooCommerce 11.1.
3.6 - 2026-08-14
- New - Refund-aware shipment quantities and labels: shipped/available counts use the net (post-refund) quantity, fully-refunded items show a "Refunded" label instead of "Not Shipped: 0", and the admin/order "Not Shipped" count now reflects the quantity still to ship.
- New - Backfill tool: create shipment records (items marked as shipped) for existing orders of one or more selected statuses (defaults to Completed). Refund-aware and skips orders that already have records.
- New - The backfill status selector uses WooCommerce's native (selectWoo) multi-select styling.
- Tweak - Regenerated languages/wc-partial-shipment.pot; the "wc-partial-shipment" text domain is declared in the plugin header, so WordPress.org serves translations automatically.
- Tweak - Replaced the jQuery fancybox modal with a dependency-free native <dialog> (vanilla JS + theme-proof CSS).
- Fix - "Unset Shipped" bulk/single action now correctly resets the item quantity to 0.
- Tweak - Improved status badge styling (pill badges, responsive width, box-sizing/font normalization).
- Tweak - Code cleanup: WpHub_Partial_Shipment_Sql renamed to Wxp_Partial_Shipment_Sql, current_time() fix, removed duplicate trunk/ and dead lang/ directories.
3.5 - 03/06/2026
- Update - security enhancements.
3.4 - 20/09/2025
- Update - Compatibility checked.
3.3 - 21/06/2025
- Fix - Escaped MySQL queries for improved security.
- Fix - Sanitized POST variables properly.
- Tweak - Compatibility check and Tested with latest version WC 9.9
3.2 - 06/09/2024
- Fix - Mark all ordered items as shipped when the order status changes to Completed.
3.1 - 26/08/2024
- Update - updated to WooCommerce HPOS compatibility.
3.0 - 23/08/2023
- Tweak - Compatibility checked.
2.9 - 29/07/2022
- Tweak - Compatibility checked.
2.8 - 22/05/2022
- Tweak - minor tweaks.
2.7 - 06/01/2022
- Fix - Virtual product error is fixed.
- Fix - Translation string fixed and added in pot file.
2.6 - 18/02/2021
- Tweak - Check if product or order item is null.
2.5 - 18/02/2021
- Fix - Fixed error during plugin activation.
2.4 - 13/02/2021
- Fix - Partially Shipping popup filled with max quantity ordered.
- Fix - Partially Shipping labels hidden for virtual products ordered.
- Fix - Filter to change the shipped label.
- Tweak - compatibility checked with latest version of wc/wp.
2.3 - 31/08/2020
- Fix - Quantity update issue fixed during manually order item editing.
- Fix - Item status fixed during manually order item editing.
- Tweak - compatibility issue fixed.
2.2 - 06/06/2020
- Fix - Extra product options and custom product field options compatibility issue fixed.
- Tweak - minor tweaks.
2.1 - 19/05/2020
- Fix - compatibility issue fixed for ordered item check.
- Tweak - Improved stored data.
2.0 - 13/05/2020
- Fix - compatibility issue fixed for latest WooCommerce version and php 7.0 and above.
- Fix - Auto Switch order status based on shipment.
- Tweak - Auto Ship all products when order marked as completed.
- Tweak - Setting option to hide label on my order page until items are shipped.
1.9 - 21/11/2019
- Feature - Multilingual ready / Translation ready.
- Fix - Order status changed to completed If all the items are marked as shipped.
- Tweak - Tweaks and tested up to latest version.
1.8 - 03/10/2019
- Fix - Tweaks and tested up to latest requirement.
1.7 - 05/03/2019
- Fix - Email Templates overriding fixed from theme.
1.6 - 01/12/2018
- Feature - Partial Shipment Email action added on order edit screen so store manager can trigger manual email when order is shipped.
- Feature - Status column added in order list popup.
- Feature - Popup settings added in partial shipment setting tab.
1.5 - 22/11/2018
- Feature - Setting added to hide status label just after order generated.
1.4 - 30/08/2018
- Bug Fix.
1.3 - 30/08/2018
- Bug Fix.
1.2 - 25/08/2018
- Bug Fix.
- UI Update
1.1 - 25/07/2018
- Bug Fix.
1.0 - 02/05/2018
- Initial release.
13. Support
For help with the free plugin, open a topic in the WordPress.org support forum or email support@wpexpertshub.com. Please include:
- The plugin version (3.8 on this page), your WordPress, PHP and WooCommerce versions, and whether you use High-Performance Order Storage.
- What you did, what you expected, what happened, and any message you saw in the popup or in the order notes.
- Whether the paid Advance plugin is, or ever was, installed on the site.
Please do not post questions about the paid Advance plugin in the WordPress.org forum. Send them to the email address.