How to Edit WooCommerce Order Status Inline from a Frontend Table

TableCrafter's inline editing for WooCommerce orders lets shop managers change order status directly from a frontend table cell, no clicking into the order detail page, no WooCommerce admin navigation. The status change writes back through the WooCommerce order API, which means all the same hooks, automations, and customer emails fire exactly as they would from the WooCommerce admin. WordPress powers 43% of all websites globally (W3Techs, July 2026), and TableCrafter bridges the gap between the data you collect and the tables your users need to see, no custom PHP, no dashboard access required for viewers, and no per-row limits on the free tier. The free version on WordPress.org supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV/PDF, role-based column visibility, and auto-refresh. Every table embeds on any page with a [tablecrafter] shortcode or the native. WooCommerce powers over 6 million live online stores (BuiltWith, 2026).
How Does Write-Back Work?
When a user changes a status value in a TableCrafter inline edit cell, the plugin does not write directly to the database. Instead it calls wc_update_order() with the new status, which is the same internal function WooCommerce uses. This means:
- The
woocommerce_order_status_changedaction hook fires - Status transition hooks fire (e.g.,
woocommerce_order_status_processing_to_completed) - WooCommerce sends the appropriate customer email (e.g., Order Completed email)
- Third-party plugins listening to status transitions (shipping plugins, CRM integrations, inventory tools) receive the change the same way they would from the WooCommerce admin
This is a meaningful distinction from plugins that write status changes directly to the database row, which bypass all WooCommerce hooks.
Step 1: How Do I Enable Inline Editing on the Status Column?
In your table config, open the Columns tab and find the order_status column. Open its settings and locate the Edit sub-panel:
- Toggle Allow inline edit on
- Edit type: Dropdown (the correct type for a status field — presents a dropdown of valid status options rather than a free-text field that could accept invalid values)
- Options source: Auto (reads WooCommerce's registered order statuses programmatically, so if you add custom statuses via a plugin, they appear in the dropdown automatically)
- Minimum role to edit this field: Shop Manager (only users with at least the Shop Manager role can change order status; customer-role users viewing the same table see the status as read-only text)
Save the column settings and save the table config. After saving, the edit settings are stored in the table configuration and apply immediately on the next page load — no cache flush is required. The change is reflected across all pages that embed this table ID using the edit="true" shortcode attribute.
Step 2: How Do I Configure Role Gating?
TableCrafter applies two independent layers of role checking for inline edits:
- Table-level edit permission: Set in Access → Roles that can edit. This gates whether the edit UI appears at all.
- Column-level edit permission: Set per field in the column's Edit sub-panel. This gates whether a specific column is editable even for users who can edit the table.
For a typical WooCommerce setup, configure both levels:
- Table-level: Administrator, Shop Manager
- Column-level for order_status: Administrator, Shop Manager
- Column-level for order_total, billing_email, etc.: Leave edit disabled, these should never be changed inline
A customer-role user visiting the page sees the table in read-only mode. The inline edit controls do not render in their browser at all, they are not hidden by CSS, they are not output by the server.
This step completes the connection between your data source and the TableCrafter table engine. Once saved, the plugin caches the connection credentials in the WordPress options table and uses them on every subsequent page load. If you update the source configuration later — for example, rotating an API key or changing a sheet URL — return to this step, enter the new value, and save again. The table updates immediately on next load without any shortcode changes.
Step 3: How Do I Place the Shortcode with Edit Enabled?
Edit the page where you want the WooCommerce order management table and add a Shortcode block or Custom HTML block. Paste:
[tablecrafter id="3" edit="true" filter="true"]
The edit="true" attribute enables the frontend edit mode globally for this embed. Without it, the table renders read-only regardless of the table config's column-level edit settings — you must explicitly activate edit mode at the shortcode level. This design allows you to embed the same table configuration on multiple pages with different behaviors: read-only on a public-facing order summary page (no edit="true"), editable on a private management page (edit="true" present), using the same table ID and the same column configuration. No separate table config is required for the two views.
After publishing, verify the order management table is accessible to Shop Manager accounts but not to Customer-role accounts by testing with accounts at each role level. If a Customer-role user can see the table, check the "Minimum role to view" setting in the table config's Access tab — it should be set to Shop Manager or higher for this use case.
How Does the Inline Edit UX Work?
In edit mode, the order_status column renders each cell as a badge with a small edit icon. When a shop manager clicks the cell:
- The badge is replaced by a dropdown select showing all available WooCommerce statuses
- The current status is pre-selected
- The manager selects the new status
- A confirm checkmark (save) and an X (cancel) appear next to the dropdown
- Clicking the checkmark sends an AJAX request to TableCrafter's REST endpoint
- TableCrafter calls
wc_update_order()server-side - On success, the cell reverts to badge display showing the new status
- On failure, an error toast appears and the cell reverts to the original value
The entire interaction happens without a page reload.
If this step produces unexpected output, check the source data directly in the connected system. TableCrafter passes data through without modification — if a cell displays an unexpected value, the source record contains that value. Use the TableCrafter debug log (Settings > Advanced > Debug Mode) to trace the exact query sent to the source and the raw response received, which narrows the diagnosis to either a source-side or rendering-side issue.
What Status Changes Trigger in WooCommerce?
Different status transitions trigger different WooCommerce behaviours. Understanding this is important before giving shop managers inline edit access:
Processing → Completed
- Fires
woocommerce_order_status_completed - Sends Order Completed email to customer
- If you use a shipping plugin, this may mark the shipment as delivered
Any Status → Refunded
- Fires
woocommerce_order_status_refunded - Does not automatically process a payment refund, WooCommerce status and payment refund are separate operations
- Sends Order Refunded email to customer
Any Status → Cancelled
- Fires
woocommerce_order_status_cancelled - Restores stock if WooCommerce stock management is enabled and Restore stock when order is cancelled is turned on in WooCommerce settings
- Sends Cancelled Order email to customer
How Does Limiting Which Status Transitions Are Allowed Work?
If you want to restrict the dropdown to only valid forward transitions (for example, prevent moving an order backwards from Completed to Processing), use the Allowed Values setting in the column's edit config. Enter the slugs of the statuses you want to appear in the dropdown:
processing, on-hold, completed, cancelled, refunded
Leave out pending and failed if you never want shop managers to set those manually. The column will display any status value (including pending and failed) in read mode, but the edit dropdown only offers the specified options.
The shortcode accepts all column and filter settings defined in the table builder as defaults, but you can override individual parameters inline. For example, `[tablecrafter id="1" per_page="25"]` overrides the default rows-per-page setting for this specific embed without changing the saved table configuration. This lets you reuse one table definition across multiple pages with different display requirements.
How Does Audit Log Considerations Work?
WooCommerce records status changes in the order notes for each order. When TableCrafter updates a status via wc_update_order(), WooCommerce adds an order note: Order status changed from X to Y. The note does not currently include which user made the change from the frontend table vs. the WooCommerce admin, both appear identically in the order note log. If you need user attribution, enable TableCrafter's Edit Log feature in Settings → Audit, which writes a separate log entry including the WordPress user ID and timestamp for each TableCrafter-initiated edit.
This configuration interacts with any caching or CDN layer active on your WordPress installation. If you use WP Rocket, LiteSpeed Cache, or a CDN such as Cloudflare, flush the page cache after making this change to ensure the updated configuration is reflected in the cached HTML served to visitors. TableCrafter's server-side output is regenerated on the next uncached request.
How Do Caveats and Limitations Work?
- Inline editing only supports
order_statusby default. Fields likeorder_total,billing_email, and shipping address require a separate configuration and may not write back correctly depending on WooCommerce's internal validation. - Changing status on a subscription order (WooCommerce Subscriptions) from the TableCrafter table follows the same path as a regular order. Test this in staging if you have active subscriptions before enabling inline edit in production.
- If you use WooCommerce Blocks for checkout, the status update path is identical, blocks do not change how order status is stored or updated server-side.
Frequently Asked Questions
How Does Write-Back Work?
When a user changes a status value in a TableCrafter inline edit cell, the plugin does not write directly to the database. Instead it calls wc_update_order() with the new status, which is the same internal function WooCommerce uses. This means:
What Is TableCrafter?
TableCrafter is a WordPress plugin that turns data from Gravity Forms, Google Sheets, Airtable, Notion, REST APIs, CSV files, and WooCommerce into interactive, sortable, filterable frontend tables. Embed any table on any WordPress page with the [tablecrafter] shortcode or the native Gutenberg block. No PHP or custom development required. The free version supports CSV, JSON, Google Sheets, and Excel. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST APIs, inline cell editing, export to CSV and PDF, role-based column visibility, and auto-refresh.
Does this require PHP or developer skills?
No. TableCrafter is configured entirely through the WordPress admin interface. You choose your data source, map fields to columns, and set display preferences using point-and-click controls. Embedding uses the [tablecrafter] shortcode or the native Gutenberg block.
Is the free version sufficient or do I need Pro?
The free plugin on WordPress.org supports CSV, JSON, Google Sheets, and Excel sources with unlimited tables, rows, and columns. Pro adds Gravity Forms, Airtable, Notion, WooCommerce, REST API sources, inline cell editing, bulk row actions, export to CSV and PDF, role-based column visibility, and auto-refresh every N seconds.
Ready to try it?
TableCrafter is free on WordPress.org. Pro unlocks inline editing, role-based permissions, and advanced data sources.