When the same item sells in several sizes, colors or presentations, you load one product and one row per variant. Each row carries its own code, price and stock.
Step by step
- In the side menu, go to Catalog → Products and open the product.
- Go to the Options tab.
- Tap Add first option. An empty row is added to the table.
- Fill the row in: that variant's Code, Name, Price and Stock.
- For each further variant, tap Add option at the bottom of the table and repeat.
- Tap Save at the bottom of the form.
As soon as you load the first variant, the Pricing & Stock card on the General tab disappears: from then on, price and stock live in this table.
The table columns
- Thumbnail: that variant's photo. Tap the box to upload it.
- Code: the variant's SKU. Each variant carries its own, different from the product code. It is what ERP integrations use, and what the file has to be named when you upload photos by ZIP.
- Name: the variant's visible name.
- 2nd variant: the second axis, with the helper text "2nd variant (e.g. size)". Explained below.
- Price: that variant's final price, not a markup on the product price. What you type is what the buyer pays. The clock beside it opens the variant's price history.
- Stock: units available for that variant. Blank means unlimited stock. The clock opens the stock history.
- Pre-order quota: only appears if the product is flagged as pre-order.
- Min: the minimum number of units of that variant the buyer has to take.
- Package: units per pack or box. The buyer's counter steps up and down by that amount.
- Color: the variant's color, for the store's color picker. If the name already states a known color, VentasxMayor detects it and offers you a tick to confirm.
- Visible: the eye. Off, the variant stops showing in the store without you deleting it.
- ⋯: the row menu, with Duplicate and Delete.
On a phone the table renders as cards. Min, Package and Color sit in each card's three-dot menu.
Size and color at the same time
There are no option groups. Each row is one concrete combination, and the cross-product is built from the two name fields:
- Name is the first axis.
- 2nd variant is the second axis.
If you sell 3 colors in 7 sizes each, you load 21 rows: Name "Chocolate" and 2nd variant "6", Name "Chocolate" and 2nd variant "8", and so on to the end. The store groups them into a color-by-size matrix using those two fields, so do not write the size inside the name: leave the color in Name and the size in 2nd variant.
If you only have one axis, for example sizes with no colors, leave 2nd variant blank and put the size in Name.
The fast way to load a matrix is to fill the first row completely and then use Duplicate from the ⋯ menu: the copy brings price, stock, Min, Package and color, and you only change the name and the code.
"The option is duplicated"
This error appears when two rows of the same product share the same Name and 2nd variant combination. The message names the product code and the repeated combination.
Two rows with the same Name are valid as long as 2nd variant tells them apart: "Chocolate / 6" and "Chocolate / 8" coexist fine. What cannot repeat is the full pair. Check for trailing spaces too, which count as part of the name.
Selling by unit and by pack
Load two variants of the same product:
- One row "By unit", with Package blank or set to 1.
- Another row "Full pack", with Package set to the units in the pack, for example 30, and its pack price.
Each row carries its own code and its own stock: stock is not shared between the two rows. If you need them to draw down the same inventory, that is not possible today: stock is tracked per variant.
The minimum is validated variant by variant
Min demands a floor of units for that specific row. With Min 8 on every size, a buyer who wants a size run has to take 8 in S and 8 in M and 8 in L.
There is no minimum that adds up all the variants of a product. There is no way to demand "8 shirts total spread across the sizes". The closest options, from best to worst fit:
- Sell the size run as its own product, for example "Shirt X — run of 8", with Package 8 and the breakdown explained in the Detail.
- Move the floor to the whole order. In the classic store, Configuration → Sale Conditions, field Initial Minimum Quantity of Units. In the new store, EDIT STORE → Screens → Cart → Order minimums, field Minimum quantity. It counts every unit in the order, across all products.
- Reward instead of blocking, with a tiered discount counted per product: "take 8 shirts across all sizes and I'll give you 15%". That is an incentive, not a barrier.
When Min and Package coexist, the real floor rounds up to the next full pack: with Package 6 and Min 8, the effective minimum is 12 units. A Min or a Package of 1 is the same as leaving them blank.
When a variant counts as out of stock
A variant becomes unbuyable when its Stock is lower than its Package, not when it hits zero. With Package 30 and 12 units in stock, that variant already reads as out of stock: there is not enough for one pack.
Blank stock means unlimited, so a freshly created variant with no number sells with no cap.
Sorting the variants
The order is a global rule, the same for all your products:
- Classic store: Configuration → Products & stock, card Option Sorting, field How do you want to sort the variants?. The options are By price, By name, By size, Manual and By parts.
- New store: tap EDIT STORE, go to Content → Catalog & access, section Variant order, field Sort variants by. The options are Manual order (product editor), Name (A–Z), Price (high to low), Price (low to high) and Size (XS→XXL).
With the rule set to Manual, and only then, a drag handle appears to the left of each row in the variant table: you drag the rows into the order you want and save. Under any other rule the handle is not shown, because the rule decides the order.
What you cannot do
- Use a product as an option of another product: the variant table accepts only text and numbers, not references to other products. There is no bundle builder.
- Load Min from a spreadsheet: the import spreadsheet carries the PACKAGE column, but no minimum column. Min is entered by hand in this table.
- Share stock between variants: each row carries its own inventory.
If you cannot find it
- You cannot see the 2nd variant field: it is a new-store feature. In the classic store it only shows if that variant already has a value loaded, for example because it came from an import.
- You cannot see the drag handle: the global sort rule is not set to Manual.
- You cannot see the Pre-order quota column: the product is not flagged as pre-order.
- You cannot see Configuration → Products & stock in the menu: your store is the new one. Variant order lives in the store editor.
- A variant code shows a warning triangle: that code does not match your ERP and orders may fail on export.