How to Build a WooCommerce Order Management Table in WordPress

A WooCommerce order management table gives your shop managers a single-page view of every order, customer name, email, products, quantities, status, and total, with the ability to filter by status and export a CSV without leaving the page. Here is how to build the complete configuration in TableCrafter from start to finish. 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 Gutenberg block. Airtable views can filter up to 100,000 records with sub-second response times on Pro plans (Airtable documentation, 2025).
What You Are Building?
The end result is a frontend table with these columns:
- Order # (sortable, links to WooCommerce order detail)
- Date (sortable, formatted MM/DD/YYYY)
- Customer Name (billing first + last)
- Product (first or primary line item)
- Qty
- Status (inline editable dropdown for admins and shop managers)
- Total (currency formatted)
The table will have a status filter dropdown at the top, a search bar, and a CSV export button. Only users with the Shop Manager or Administrator role can see or interact with it.
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.
Step 1: How Do I Create the Table Configuration?
Go to TableCrafter → Tables → Add New. Set the data source to WooCommerce: Orders. Name the table Order Management, All Orders. When you select the WooCommerce: Orders source, TableCrafter connects to WooCommerce's order data layer and reads all registered order fields, including core fields like order_id, order_status, order_date, order_total, billing and shipping address fields, and line item fields. Custom order meta added by other plugins also appears in the field list if it has been registered via standard WooCommerce order meta hooks.
The WooCommerce data source is Pro-only. Verify your Pro license is active under TableCrafter → Settings → License before attempting to save. If the WooCommerce option is missing from the data source dropdown, the Pro license is either absent or inactive. On a free install, the WooCommerce source is not shown in the dropdown at all rather than appearing as a disabled option.
Step 2: How Do I Configure Every Column?
Open the Columns tab and add the following columns in order:
Order # with Link
Add the order_id field. Set the Display Type to Link. In the link URL field enter:
/wp-admin/post.php?post={order_id}&action=edit
This creates a clickable order number that jumps directly to the WooCommerce order detail screen. Set Open in to New Tab so the table stays open.
Date
Add order_date. Set Format to Date and choose MM/DD/YYYY from the date format picker. Enable Sortable. Set this as the default sort column, descending.
Customer Name (Computed Column)
Click Add Computed Column. Set the label to Customer. In the template field enter:
{billing_first_name} {billing_last_name}
TableCrafter interpolates the two fields at render time. The computed column is searchable by default.
Add billing_email. Set Display Type to Email so it renders as a clickable mailto: link directly in the cell. Shop managers can click the address to open their email client pre-addressed to the customer without copying the address manually. For the role-based permissions configured later in this guide, consider whether you want all shop managers to see customer emails or only administrators. If you need to restrict it, set this column's Minimum role to view to Administrator in the column's Access sub-panel. Managers will still see the row and all other columns, but the email cell renders empty for their role.
Product
Add line_item_name. Label it Product. This shows the name of the first line item. If an order has multiple products, enable Show all line items in the table-level settings to expand the row; otherwise this field shows the first product with a count badge for additional items.
Qty
Add line_item_quantity. Label it Qty. Set Align to center. Set Column Type to Number so the value is treated as a numeric cell in XLSX exports (enabling SUM formulas) and sorts numerically rather than alphabetically in the frontend table. For orders with multiple line items, this field reflects the quantity of the first line item unless Show all line items is enabled at the table level, in which case each line item gets its own row and the quantity column shows the per-item count. Keep this column narrow, typically 60-80px, since it rarely contains more than 3-4 digits.
Status (Inline Editable)
Add order_status. Label it Status. Set Display Type to Badge so each status value gets a colour-coded pill. Then open the Edit sub-panel for this field:
- Toggle Allow inline edit on.
- Set Edit type to Dropdown.
- The options will auto-populate from WooCommerce's registered order statuses.
- Set Minimum role to edit this field to Shop Manager.
When a shop manager changes the status in the dropdown and clicks the checkmark, TableCrafter calls the WooCommerce order update API, which triggers all the same hooks as changing the status in the WooCommerce admin, including email notifications to customers.
Total
Add order_total. Label it Total. Set Format to Currency. TableCrafter reads the store's WooCommerce currency symbol and position settings and applies them automatically. Set Align to right.
Step 3: How Do I Configure Filters?
Open the Filters tab. Add a filter for order_status:
- Filter Type: Dropdown (single-select)
- Label: Status
- Default Value: Leave blank to show all orders, or set to processing to default to active orders
- Include "All" option: Yes
Add a second filter for order_date:
TableCrafter validates this configuration on save. If validation fails, the admin panel displays a specific error message identifying which field caused the problem. Correct the field value and save again without needing to restart the setup process.
The column mapping you define here is stored as a JSON configuration in the WordPress database. You can export this configuration using the TableCrafter export tool and import it to another table or another site. This is useful when replicating a table layout across multiple pages or when migrating a table to a staging environment for testing before going live.
- Filter Type: Date Range
- Label: Date Range
- Default: Last 30 days
Step 4: How Do I Configure Search and Export?
Open the Toolbar tab in the table builder and enable the following:
- Search bar: TableCrafter will search across
order_id, the computed customer name field, andbilling_emailby default. You can add or remove columns from the search scope in each column's settings panel. Search is case-insensitive and matches on partial strings; typing "smith" finds "John Smith" and "Smith & Co". - Export to CSV: The export button appears in the top-right of the table toolbar. Exports respect the active filter state. If a shop manager filters to Processing orders from the last 7 days and clicks Export, the CSV contains exactly those rows, not all orders in the database. This makes the export useful for targeted reporting without a separate analytics tool.
To also enable Excel (XLSX) export, enable Export to Excel in the same toolbar tab. TableCrafter generates a formatted XLSX file using PhpSpreadsheet, with a bold header row, auto-sized columns, and correct numeric and date cell types. If PhpSpreadsheet is not available on the server (uncommon on standard WordPress hosts), TableCrafter falls back to exporting a CSV file with an .xlsx extension as a safety measure. You can verify PhpSpreadsheet availability on your server under TableCrafter → Settings → System Status.
Step 5: How Do I Set Access Permissions?
In the Access tab:
- Minimum role to view: Shop Manager
- Roles that can edit: Shop Manager, Administrator
If a logged-out user or a customer role user visits the page containing the shortcode, TableCrafter renders nothing, no error message, just empty output. Add a custom message in the No Access Message field if you want to redirect them.
If the result does not match expectations after saving, use the TableCrafter debug log (enable via TableCrafter Settings > Advanced > Debug Mode) to trace exactly which configuration value is being applied for the current request.
The configuration you set here applies to every visitor who loads a page containing this table, regardless of whether they are logged in. Role-specific overrides for columns and rows are a separate layer and do not replace these global display settings. Apply global settings first, then add role restrictions as needed for tables that serve multiple user types.
Step 6: How Do I Save and Place the Shortcode?
Save the table config. Note the table ID. Place the shortcode on a private or password-protected page, or a page inside a members-only area:
[tablecrafter id="3" edit="true" filter="true" search="true" export="true"]
All four attributes are enabled here. If you configured inline editing through the table config UI, the edit="true" attribute is redundant but harmless. Same for filter="true", it is on by default when filters are configured, but including it in the shortcode makes the intent explicit.
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 7: How Do I Test Every Role?
Before deploying to production, test with three user accounts:
Test this step while logged in as a user with the target role to confirm the expected behavior. Logged-in admin users always see all columns and all rows regardless of role restrictions, which can mask visibility issues during initial configuration.
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.
- Administrator: Should see the full table with all columns and be able to change order status.
- Shop Manager: Same as administrator for this config.
- Customer or logged-out: Should see no table (empty output or your custom no-access message).
How Does Column Configuration Summary Work?
order_id, Link to WC admin order detailorder_date, Date format, default sort DESC- Computed:
{billing_first_name} {billing_last_name} billing_email, mailto linkline_item_name, First productline_item_quantity, Center alignedorder_status, Badge display, inline editable dropdown, shop manager+order_total, Currency format, right aligned
How Does Performance Considerations Work?
Large WooCommerce stores with 50,000+ orders should enable TableCrafter's Server-Side Processing mode in the table settings. In this mode the table fetches only the current page of results from the database rather than loading all matching orders into memory. Pagination, sorting, and filtering all work the same way from the user's perspective.
The setting is stored in the WordPress options table under the table's configuration key. It does not modify the original data source and can be changed at any time without affecting the underlying records.
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.
Frequently Asked Questions
How Do I Create the Table Configuration?
Go to TableCrafter → Tables → Add New. Set the data source to WooCommerce: Orders. Name the table Order Management, All Orders.
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.
Changes take effect immediately after saving. No cache flush or page refresh is required for the new configuration to apply to all shortcode instances of this table.
After completing this step, verify the result by viewing the page as a logged-out visitor in an incognito window. This confirms the table behaves correctly for public visitors rather than reflecting admin-level permissions that may hide configuration issues during initial setup. Check both the rendered output and the browser console for any JavaScript errors.