DataFirefly Product Order — Complete Guide
Install, configure and use drag-and-drop sorting for WooCommerce products: global or per-category order, applied on default sorting, with the "out of stock at the bottom" rule.
DataFirefly Product Order adds a dedicated admin screen to set the display order of your WooCommerce products by simple drag and drop. You can set a global order for the whole shop, or an independent order for each category. The custom order is applied on the front end only when the customer uses the default sorting: sorting by price, popularity or rating stays untouched. This guide covers installation, the sorting screen, the difference between global and per-category order, front-end application, the “out of stock at the bottom” rule, performance, compatibility and troubleshooting.
Installation
- Download the
df-product-order.ziparchive from your DataFirefly account. - WordPress admin → Plugins → Add New → Upload Plugin → send the ZIP, then Activate.
- On activation, the plugin creates its positions table (
wp_dfpord_order) and adds the Products → Product order entry.
Requires WordPress 6.4 or higher, PHP 8.0 or higher and WooCommerce 7.0 or higher. Compatible with HPOS (High-Performance Order Storage), multisite and multilingual setups. No Composer dependency, no external service.
Two-minute quick start
- Open Products → Product order.
- In the Scope dropdown, keep “Global order (shop)” or pick a category.
- Drag and drop the products into the order you want using the handle on the left of each row. Every drop is saved automatically.
- Visit your shop: the products appear in the new order as soon as the active sorting is “default”.
For an immediately visible result, make sure your shop’s default sorting is “Default sorting” (WooCommerce → Settings → Products → Display), and not a date or price sort.
The “Product order” screen
Everything is managed from Products → Product order. The screen has a toolbar and the sortable list.
Toolbar
- Scope: choose “Global order (shop)” or a specific product category. Changing the scope reloads the matching list.
- Search: filters the list by product name, handy to quickly find an item in a large category.
- Out-of-stock products at the bottom: a toggle that enables the automatic front-end rule (see below). Its state is saved as soon as you change it.
Sortable list
Each row shows a drag handle, the product thumbnail, its name (with an Out of stock badge where relevant) and its price. Grab a row by its handle, move it, release: the order is saved in the background and an “Order saved” message confirms it.
The list loads up to 200 products per scope, which is more than enough to sort a category. For a very large shop, prefer sorting category by category rather than the global view.
Global order or per-category order
Both scopes are independent and coexist without conflict.
Global order (shop)
Sets the order used on the shop page and anywhere products are displayed without a category context. To stay compatible with your theme and other extensions, the global order syncs each product’s native menu_order field.
Per-category order
Each category keeps its own order, stored in the dedicated wp_dfpord_order table. The same product can therefore lead one category and sit lower in another. This order applies on product category archive pages.
Set a clean global order first, then fine-tune category by category only where needed. Products without a position in a category are placed automatically after those that have one, following the global order then the title.
Front-end application
The custom order never replaces your visitors’ sorting choice. It applies only when the active sorting is the shop’s default sorting. As soon as a customer selects “Sort by price”, “by popularity” or “by average rating”, their choice wins and the custom order is ignored for that page.
- Shop page and category-less lists: global order.
- Category archive pages: the relevant category’s order (otherwise, fallback to the global order then the title).
The “out of stock at the bottom” rule
Enabled via the toolbar toggle, this rule automatically pushes out-of-stock products to the end of the list on the front end, while keeping your custom order for available products. It is layered on top of the default sorting without affecting the sorts chosen by the customer.
The rule acts at display time: it does not change the order you saved. Turn the toggle off to return to a strictly manual ordering.
Volume, performance and limits
- Positions are cached (object cache) to avoid repeated queries and keep shop pages fast.
- The admin screen loads at most 200 products per scope; this cap can be raised by a developer by adjusting the load limit in the code.
- Saving a new order updates the scope’s positions and, for the global order, the
menu_orderfield of the products involved.
Compatibility and technical notes
- WordPress 6.4+, PHP 8.0 to 8.3, WooCommerce 7.0+, multisite.
- HPOS (High-Performance Order Storage) compatibility declared.
- Global order stored via the native
menu_orderfield; per-category order stored in thewp_dfpord_ordertable (unique product + category key). - Front-end application via query clause filtering, on default sorting only.
- Multilingual: a
.pottranslation template is provided (compatible with Polylang, WPML, Loco Translate). - PSR-4 architecture with autoloader, no Composer dependency and no third-party calls.
Uninstall
Deleting the plugin from the Plugins screen performs a full cleanup: the wp_dfpord_order table is dropped and the plugin options are removed. The products’ menu_order field, being native WooCommerce data, is kept. Simply deactivating the plugin removes no data.
FAQ and troubleshooting
The order doesn’t appear on the shop. Make sure the default sorting is selected (not a price or date sort). Also check WooCommerce → Settings → Products → Display, and clear the cache if you use a page-cache plugin.
My per-category order isn’t taken into account. Make sure you selected the right category in the “Scope” dropdown before sorting, and that you’re viewing that category’s archive page on the front end (not the shop page).
Drag and drop doesn’t respond. Force-reload the page (browser cache) and check that no JavaScript minification or blocking plugin is preventing the admin scripts from loading.
A product doesn’t appear in the list. The list is limited to 200 products per scope and only shows published products. Use the search field, or sort by category to reduce the volume.
Out-of-stock products don’t move down. Enable the “Out-of-stock products at the bottom” toggle; the rule applies only to default sorting, not to price, popularity or rating sorts.