Install Category Products Reorder for WooCommerce, open WooCommerce → Reorder and drag a category's products into your order. It is saved automatically and used when shoppers see the default sorting.
Contents9 sections
To reorder the products inside a WooCommerce category, install Category Products Reorder for WooCommerce, open WooCommerce → Reorder, choose a category and drag its products into the order you want. Every move is saved automatically. One limit to know before you start: your order is used only while the category page runs on WooCommerce’s default sorting, so a shopper who picks price, popularity, rating or latest sees that sorting instead.
Why order products per category, and what the plugin does not do
The plugin lets you decide which products shoppers see first on each category page. Every category keeps its own order, so one product can be first in “Sale” and last in “Shoes”. The orders live in a small table of the plugin’s own, and your products and their global menu order are never changed.
- The order applies only to a product query limited to exactly one product category. It does not apply to the main shop page, tag pages, search results or a page that shows two categories at once.
- It does not override a shopper’s choice of another sorting, and it does nothing when your store’s default sorting is something other than “Default sorting”.
- It does not order the product list in the WordPress admin.
- It has no settings screen. The only choices are the ones on the Reorder screen.
What you need
- WordPress 6.5 or later and PHP 7.4 or later.
- WooCommerce 8.0 or later, active (tested up to 11.1). The plugin header requires WooCommerce, so WordPress will not activate the plugin without it.
- A user with the
manage_woocommercecapability, which WooCommerce gives to Administrators and Shop Managers. - A database that lets the plugin create one table. The all-or-nothing saving described below needs a transactional storage engine such as InnoDB.
- Polylang, only if you want a separate order for each language.
It is a paid plugin, but no code in it checks the licence before ordering products. The key only unlocks updates.
Step-by-step setup
- Make sure WooCommerce is installed and active.
- Download the plugin zip from your purchase on wpexpertshub.com.
- In WordPress, open Plugins → Add Plugin → Upload Plugin, choose the zip, click Install Now, then Activate Plugin. Activation creates the table
{prefix}pro_sort. - Optional: open Plugins → WpExperts Hub Licences, paste your key into Licence key and click Activate licence. This is needed for updates only.
- On a classic theme, open Appearance → Customize → WooCommerce → Product Catalog and check that Default product sorting is “Default sorting (custom ordering + name)”. For a block theme, see the paragraph after this list.
- Open WooCommerce → Reorder. You can also open Products → Categories and click Reorder products under a category.
- Under Product category, choose a category. The first entry in the list is “Select Category”.
- Drag a product by its handle (the three bars) to a new place. The status text shows “Saving…” and then “Order saved.”
- Test it: click View category, next to the Product category label. The category page opens in a new tab and, with the default sorting, lists the products in your order.
On a block theme, WordPress hides Appearance → Customize unless a plugin or the theme adds Customizer settings, and WooCommerce 11.2.1 adds its section only when the Customizer page itself opens. If the menu item is missing, open /wp-admin/customize.php and go to WooCommerce → Product Catalog. According to WooCommerce’s block code, a Product Collection block that uses the Default Query also has a Default sort by setting for the same option; “Manual (menu order + name)” is the default sorting.
Working on the Reorder screen
What the list shows
The drop-down lists every category, empty ones included, with children indented under their parents. The number in brackets is the product count WordPress stores, so it can differ from the number of rows.
The list holds the products of the category and of its sub-categories whose status is Published, Private, Draft, Pending or Scheduled, so you can place a product before it goes live. Trashed products are not listed. Products with a saved position come first and the others follow in WooCommerce’s default order. A summary line shows the number of products and a “Custom order” or “Default order” badge. Each row shows:
- A position number, the drag handle and a product image.
- The product name, which links to its edit screen in a new tab, followed by its ID and SKU, for example (#123, SKU-1).
- Labels for Draft, Pending, Private or Scheduled, for Out of stock or On backorder, and for Hidden. Hidden appears when the catalog visibility is Hidden or Search results only: you can place the product, but visitors do not see it on category pages.
- The price and four buttons: Move to top, Move up, Move down and Move to bottom.
Moving products
- Drag: pull a row by its handle. Touch screens work too.
- Buttons: use the four move buttons at the end of the row.
- Keyboard: tab to the handle, then press Up or Down arrow to move one place, Page Up or Page Down to move ten places, Home for the top and End for the bottom.
- Search: type in “Search by name, SKU or ID” to hide the rows that do not match. Dragging is paused while a search is active, but the buttons still work and move the product within the full list.
How saving works
About half a second after your last move, the plugin sends the whole list and saves it for that category. After your first move, every product on the list has a saved position, including the ones you did not touch. A save replaces the category’s order in one database transaction, and only one save runs at a time per category. If two people save the same category, the second waits and the last save wins. A failed save keeps the previous order and shows its reason with a Try again button.
One save accepts up to 20,000 products. If you leave the page with a change that is not saved yet, the browser asks you to confirm.
What shoppers see
With the default sorting, a category page lists the products with a saved position first, lowest position first, then the others in WooCommerce’s usual order. The order is part of the product query, so it also holds across the pages of a paginated category. New products, and products you add to a category after your last save, appear after the ordered ones until you place them.
- Sort menu: a shopper who chooses another sorting gets that sorting. WooCommerce shows the “Default sorting” entry in its sort menu only while the store’s default is “Default sorting”.
- Sub-categories: a parent category’s page also lists products of its sub-categories and uses the parent’s own saved order; a sub-category’s page uses its own.
- Shortcodes and blocks: the plugin acts on any product query limited to one category with the default sorting, wherever it comes from. In WooCommerce 11.2.1,
sorts by menu order unless you setorderby, andfollows the store’s default sorting, so both follow your order; so doesorderby="menu_order". WooCommerce caches the result of these shortcodes and the plugin does not clear that cache, so a new order can take a while to show;cache="false"avoids that but runs the query on every page view. A Product Collection block that uses the Default Query, as in WooCommerce’s catalog template, reuses the page’s own query and so follows your order. One filtered to a single category has its own Order by setting, “A → Z” by default, and follows your order only when it is “Manual (menu order + name)”. Test your own block theme.
Reset, deactivate and delete
- Reset to default order: this button shows only while the open category has a saved order. After you confirm, that category’s saved order is deleted and the list reloads in the default order. Products are not touched.
- Deactivate: saved orders are kept but not applied while the plugin is inactive.
- Delete: deleting the plugin drops the table and every saved order.
- Products and categories: deleting a product permanently, or a category, removes its saved rows; moving a product to the Trash does not. A product removed from a category keeps its row there, so its old position applies again if you add it back, until you next save that category.
One order per language with Polylang
When product categories are translatable in Polylang (Languages → Settings → Custom post types and Taxonomies), every language has its own categories and so its own order. The drop-down groups the categories by language. To give the other languages the same order, open the source category and click Copy order to translations. The button appears only when the category has a saved order and translations, and it asks you to confirm because the translated categories’ current orders are replaced.
Each product is swapped for its translation, so the products need a language and translations in Polylang too. Products without a translation are left out. The status then reports a count per language, such as “Order saved. fr: 12, de: 0”. A language with nothing to map keeps its existing order.
Good to know and troubleshooting
- The order is not used on my category page: check that the store’s default sorting is “Default sorting”, that the shopper has not picked another sort, that the page shows exactly one category, that the summary badge says “Custom order”, and that no page cache is serving an old copy.
- Yellow notice on the Reorder screen: the saved default sorting of your store is not “Default sorting”. The notice links to WooCommerce → Settings → Products, but in WooCommerce 11.2.1 that tab does not hold the setting; change it as in step 5. The notice reads only the saved option, so it stays silent when a theme or plugin changes the default with the filter
woocommerce_default_catalog_orderby, although your order is then not used either. - Page cache shows the old order: saving refreshes WordPress’s cached product queries, but the plugin does not clear page-cache plugins. Clear the cache after reordering, or hook your cache plugin to the action
wooexp_reorder_saved. - “You are not allowed to do this.”: the security token on the open screen has expired, or you lost the capability. Reload the screen.
- “Another save of this category is still running. Please try again.”: two people or tabs saved the same category and the second waited more than 15 seconds. Wait a moment and click Try again.
- “This category has too many products to be ordered in one go.”: the list has more than 20,000 products. The filter
wooexp_reorder_max_productsraises the limit. - “None of the products belongs to this category.”: for example, the products were moved to another category in another tab. Reload the screen. The old order is kept.
- A product is on the list but not in the shop: it is not Published, or its catalog visibility is Hidden or Search results only. Its position applies once it is visible.
The full documentation also covers the filter wooexp_reorder_query_term_id, the wooexp_skip query variable, the row template override, privacy and the changelog.
Links
Plugin page: Category Products Reorder for WooCommerce. Hook reference: Category Products Reorder documentation. More tools: Browse all plugins.