Magento 2's admin paginates custom option values, making it impossible to drag-and-drop sort across pages. PrivateDevops_CustomOptionsFix is a lightweight, upgrade-safe module that loads all option values on a single page so you can reorder them instantly.
The Problem: Pagination Breaks Sort Order
If your Magento 2 catalog includes products with many custom options -- think colour swatches, sizes, or add-ons -- you have probably hit this frustrating admin bug. Magento paginates the option-values grid in the product editor, so drag-and-drop reordering stops at the page boundary.
For example, with 100 option values displayed 20 per page, you cannot move an item from page 2 to page 1. Bulk reordering becomes a tedious, error-prone chore.
Bottom line: The default grid pagination prevents catalog managers from reordering all option values in one go, which is a major productivity killer for stores with configurable products.
The Solution: PrivateDevops_CustomOptionsFix
PrivateDevops_CustomOptionsFix is a lightweight, upgrade-safe Magento 2 module that lets you configure how many custom option values are displayed at once (default 200, adjustable to 50, 300, 1000, or more). All values load on a single page -- no more pagination, no more drag-and-drop headaches.
- Displays every custom option value in one sortable grid
- Zero core code changes -- 100 percent upgrade-safe
- Compatible with Magento 2.4.8 and earlier (Magento 2.4.9+ ships a native fix)
- Developed and supported by Private DevOps LTD
Why Does This Matter?
Sorting option values is not just cosmetic. The order affects how options appear to customers, can influence conversion rates, and may even break product logic (for example, default option selection or price ordering).
Without the fix:
- You cannot control the exact display order when more than 20 values exist.
- Option management is tedious and error-prone.
- Bulk-updating sort orders is virtually impossible.
With PrivateDevops_CustomOptionsFix:
- All option values load on one page -- easy, visual, drag-and-drop sorting.
- A single configuration field frees your admin from pagination limits.
- No hacks required -- just a future-proof module with open-source code.
Tip: This is especially valuable for stores that sell car mats, apparel, customisable gifts, or anything else with large option sets.
Installation Guide
- Download the module from GitHub (link below).
- Copy the files into your Magento installation:
app/code/PrivateDevops/CustomOptionsFix
- Enable the module:
php bin/magento module:enable PrivateDevops_CustomOptionsFix
php bin/magento setup:upgrade
php bin/magento cache:flush
If you are running in production mode, also execute:
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f
Configuration & Usage
Once installed and enabled, set the maximum number of option lines at:
Stores > Configuration > Catalog > Catalog > Edit Product MAX Option Lines
- Default: 200
- Change to any value you need: 50, 500, 1000, etc.
When you edit a product (Catalog > Products > Edit), all option values will load in a single grid, ready for instant sorting and bulk editing.
Tip: Setting very high values (1000+) may slow the admin for products with massive option sets. Test with your real data.
Troubleshooting Tips
- If changes do not appear, clear the browser cache and run:
php bin/magento cache:flush
- Check the current configuration value:
php bin/magento config:show catalog/customoptions/pagesize
- To uninstall:
php bin/magento module:disable PrivateDevops_CustomOptionsFix
rm -rf app/code/PrivateDevops/CustomOptionsFix
php bin/magento setup:upgrade
php bin/magento cache:flush
Download & More Info
Ready to eliminate custom option pagination in your Magento 2 admin?
Download PrivateDevops_CustomOptionsFix from GitHub
Developed and supported by Private DevOps LTD. We offer custom solutions and Magento optimization -- contact us for support.
Frequently asked questions
Why can't I drag and drop custom option values across pages in the Magento 2 admin?
The Magento 2 product editor paginates the option-values grid, and drag-and-drop reordering stops at the page boundary. With 100 option values shown 20 per page, an item on page 2 cannot be moved to page 1. Bulk reordering turns into a slow, error-prone job for any product with a large option set.
How do I show all custom option values on one page in Magento 2?
The CustomOptionsFix module loads every custom option value into one sortable grid, so the whole list can be reordered with drag and drop. How many values load at once is configurable, with a default of 200. The module makes zero core code changes, which keeps it upgrade-safe, and its code is open source.
How do I install the CustomOptionsFix module in Magento 2?
Download the module from GitHub and copy its files into app/code/PrivateDevops/CustomOptionsFix. Then run php bin/magento module:enable PrivateDevops_CustomOptionsFix, php bin/magento setup:upgrade and php bin/magento cache:flush. In production mode, also run php bin/magento setup:di:compile and php bin/magento setup:static-content:deploy -f.
Where do I set how many custom option lines Magento 2 shows per product?
With CustomOptionsFix installed, the setting is under Stores > Configuration > Catalog > Catalog > Edit Product MAX Option Lines. The default is 200, and it can be changed to 50, 500, 1000 or whatever the catalog needs. To read the current value from the command line, run php bin/magento config:show catalog/customoptions/pagesize.
Does Magento 2.4.9 still need the CustomOptionsFix module?
No. Magento 2.4.9 and later ship a native fix for custom option pagination, and CustomOptionsFix is built for Magento 2.4.8 and earlier. Stores on 2.4.8 or an older release are the ones that gain from installing the module.
Can a very high custom option limit slow down the Magento 2 admin?
Yes. Setting the limit very high, 1000 or more, may slow the admin for products with massive option sets, because every value loads into one grid. Test the chosen limit with real catalog data before relying on it.
How do I uninstall CustomOptionsFix from Magento 2?
Run php bin/magento module:disable PrivateDevops_CustomOptionsFix, delete the module folder from app/code, then run php bin/magento setup:upgrade and php bin/magento cache:flush. If the admin still shows old behaviour after installing or removing the module, clear the browser cache and flush the Magento cache again.
Why does the sort order of custom option values matter in Magento 2?
The order controls how options appear to customers, can influence conversion rates and may even break product logic such as default option selection or price ordering. Stores selling car mats, apparel, customisable gifts or anything else with large option sets feel this most. Without a fix, the exact display order cannot be controlled once a product has more than 20 values.
Read how we handle it in DevOps for e-commerce.
Related Articles
How to Configure Varnish for Magento So It Stops Caching the Wrong Thing
Varnish in front of Magento serves anonymous pages without touching PHP. The wrong Varnish in front of Magento serves one shopper's cart to everybody, which is worse than having no cache at all. Magento generates its own configuration and most of the work is using that rather than something copied from a forum. This covers what the generated file refuses to cache and why, how invalidation actually works as a ban rather than a purge, the two ways it silently fails, and how to prove a page came from cache.
MagentoMagento 2 EU-Compliant Invoice Date PDF
By default, Magento 2 omits the invoice creation date from PDF invoices and ignores store-level locale settings. Our open-source PdfOverride module adds legally required dates, translates invoice text per store view, and ensures EU VAT Directive compliance out of the box.
MagentoHow to Disable OpenSearch Security in Magento 2 While Keeping It Private on Ubuntu
OpenSearch ships with SSL and authentication enabled by default, which can complicate Magento 2 integration in development or internal environments. This guide explains how to safely turn off OpenSearch security while restricting access to localhost using Ubuntu's firewall.