All work
2026
Three tools for a catalogue that outgrew the admin
Plugins for the parts of store administration that stop working once the catalogue is large: SKUs, coupon organisation, and getting data back out.
- Role
- Sole engineer: three plugins
- Stack
- PHPWordPressWooCommerceAdvanced Custom FieldsJavaScript
The problem
The stock admin screens assume a small catalogue. At several hundred products with variations, entering SKUs by hand costs a day, coupons pile up in a list you cannot bulk-edit, and useful data sits behind a screen with no export.
What I built
- A SKU generator with templated patterns for products and variations, covering prefix, ids, parent SKU, attributes, category and slug, sanitised and de-duplicated with numeric suffixes on collision.
- It runs whole-catalogue jobs in batches with a progress bar, because five hundred products through the ordinary bulk action is a PHP timeout. Small selections still process inline; large ones go to the batch runner on their own.
- A coupon-categories plugin that gives coupons a nested taxonomy, restores the Quick Edit WooCommerce takes away from them, and adds filter tabs and bulk add-and-remove actions.
- It reads WooCommerce's own menu setting at runtime instead of hard-coding a parent, so its screen follows the coupons screen wherever a future release moves it.
- Bulk removal works for filing and refuses to touch discount restrictions. Take a restriction off and you widen who can use a discount, which shows up as money; take a coupon out of a category and you have fixed a mis-click. Only the first is worth making somebody do one at a time.
- An abandoned-cart exporter that streams in batches so a large export cannot exhaust memory, writes a UTF-8 byte order mark so spreadsheets render accented names, and resolves each field through a fallback chain, since the free and paid builds of the source plugin store them under different keys.
- Each plugin ships a real uninstaller that removes its own settings and leaves the store's data alone unless you tell it otherwise.