Skip to content
July 11, 2026·4 min read

Variable Products in WooCommerce: Sizes, Colors, and Per-Variant Stock

A practical guide to WooCommerce variable products: attributes, variations, and tracking stock for each size and color separately.

You have a t-shirt that comes in three sizes and two colors. In WooCommerce you don't create six separate products — you create one variable product, with attributes (size, color) and variations built from their combinations. Each variation can have its own price, its own image, its own SKU and, most importantly, its own stock.

Sounds simple, but this is where most stores stumble: they set attributes at the wrong level, forget to tick "Used for variations," or manage stock on the product instead of on each variation. The result is a page where the customer can't pick a size, or buys an XL that's actually sold out. Here are the correct steps, in order, so you skip the pain.

Attributes vs. variations: the difference many miss

These are two distinct things, and mixing them up breaks everything.

  • An attribute is the characteristic: "Size," "Color," "Material." It has values: S, M, L or Red, Blue.
  • A variation is a concrete sellable combination: "M / Red," with its own price and stock.

You can define attributes globally (Products → Attributes, reusable across the whole store) or locally, right on the product. I recommend global attributes for standard sizes and colors — set them once, reuse everywhere, and your shop filters stay consistent.

The critical step: for each attribute you add to a product, tick "Used for variations." Without that checkbox, WooCommerce won't let you generate variations from it, and you'll wonder why the option is missing.

The concrete setup steps, in order

On the product edit screen:

1. Under Product data, change the type from "Simple product" to "Variable product."

2. Open the Attributes tab. Add "Size" and "Color," enter the values (separated by `|` if local), tick Visible on product page and Used for variations. Save attributes.

3. Go to the Variations tab. You can click "Generate variations" to auto-create every combination, or add only the real ones manually (sometimes you don't stock every combination).

4. Expand each variation and fill in: price, SKU, image and — crucially — the stock data.

Don't skip saving attributes before going to Variations. That's mistake number one: you click Variations, nothing appears, and you think it's a bug.

Per-variant stock: exactly where to tick it

This is the heart of your question. Stock can be managed at two levels, and you want it on the variation.

Inside each expanded variation, tick "Manage stock?" Only then does the Stock quantity field appear for that specific combination. So you set, for example: M / Red = 8 units, L / Red = 0, XL / Blue = 3.

What happens in practice:

  • When a variation's stock hits 0, that exact option becomes unavailable in the selector — the rest stay on sale.
  • You can set Backorders (allow orders beyond stock) individually per variation.
  • You can define a "Low stock" threshold to get a notification.

If you leave "Manage stock?" unticked on the variation, WooCommerce inherits the product-level status (In stock / Out of stock) with no exact count — and you lose the fine control you're after.

Images, SKU, and prices per variation

A well-built variation isn't just correct stock.

  • Per-variation image: when the customer picks "Red," the gallery should show the red product. Set a dedicated image on each variation — it's the difference between a page that sells and one that leaves room for doubt.
  • Per-variation SKU: give each combination its own code (e.g. TSH-RED-M). It simplifies inventory, accounting integration, and any product feeds.
  • Per-variation price: if XXL costs more, set it only there. Leave the rest on the product's base price.

A UX detail: if a customer selects a combination that doesn't exist as a variation (e.g. you never built "XXL / Red"), the "Add to cart" button simply won't appear. That's why it's best to generate only real variations and keep active only the sellable ones.

Common mistakes and how to avoid them

From working with real stores, the same traps recur:

  • Too many combinations. 5 sizes × 6 colors × 3 materials = dozens of variations to manage by hand. Ask whether you really sell every combination.
  • Stock managed at product level, not variation — so a sold-out XL stays "on sale."
  • Local-only attributes when you have dozens of similar products: you lose consistent shop-wide filtering.
  • Forgetting the per-variation image, so the customer always sees the same photo.
  • Not testing as the customer. Open the page in incognito and actually buy a size all the way through.

If you have dozens or hundreds of products with variants, manual setup becomes real work. At MPO Web Studio we prepare a ready-built demo, with the attribute and variation structure already in place, so you see the product before any payment. We work remotely, nationwide. One WhatsApp message and we'll tell you concretely what your store involves.

Frequently asked questions

Can I have a different price for each size?+

Yes. Each variation has its own price field. You set a price only where it differs (e.g. a pricier XXL) and leave the rest on the base price. The sale price also works per variation.

What happens when a single size sells out?+

If you ticked "Manage stock?" on the variation and the quantity reaches 0, that exact option becomes unavailable in the selector. The other sizes and colors stay on sale normally. You can allow backorders individually if you want.

Should I use global or local attributes?+

For standard sizes and colors I recommend global (Products → Attributes): define them once, reuse them on any product, and your shop filters stay consistent. Local attributes are only good for something specific to a single product.

How many variations can I have without slowing the site?+

WooCommerce supports many variations, but dozens or hundreds on one product can slow admin and the page itself. If you get there, it's worth careful structuring or dedicated plugins. Generate only the combinations you actually sell.

Can I import per-variation stock from a file?+

Yes, via WooCommerce's native CSV import or an import plugin. Each variation is a row linked to the parent product, with its own SKU and stock. Handy for large catalogs — but it needs a correctly structured file.

Free guide

7 mistakes that drive clients away from your website

Leave your email and get the guide right here, instantly. No spam.

By submitting, you agree to the Privacy Policy.
MThe MPO teamWe reply personally

Want to see what your business's website could look like?

Message us on WhatsApp and we'll build you a free demo website with your business name on it. See it first, then decide — no strings attached.

Ask for a free demo websiteWe usually reply within a few minutes