How to Create WooCommerce Variable Products: Sizes, Prices, and Stock (2026)

A large pizza costs more than a small one. A gluten-free crust might cost extra, and it may sell out before the regular dough does. Your product page needs to handle those differences without making customers hunt through six nearly identical menu listings. That’s the job of a WooCommerce variable product: one product page with...

September 13, 2026 WPSlash

A large pizza costs more than a small one. A gluten-free crust might cost extra, and it may sell out before the regular dough does. Your product page needs to handle those differences without making customers hunt through six nearly identical menu listings.

That’s the job of a WooCommerce variable product: one product page with selectable options, where each combination can have its own price, image, and stock settings. The setup isn’t difficult, but a few choices early on determine whether your catalog stays manageable or becomes a weekend-long spreadsheet project.

This 2026 guide uses pizza sizes and crust types as a working example. The same process applies to clothing, coffee bags, packaged food, and other products sold in distinct versions. The instructions follow WooCommerce’s classic Product data interface; labels and placement can differ if your store uses a different product editor.

When to Use Variable Products Instead of Simple Products or Add-Ons

Start with three terms. A product is the item you’re selling, such as a Margherita pizza. An attribute describes an option, such as Size or Crust. A variation is a purchasable combination of those options: Large / Thin, for example.

A simple product suits an item with one purchasable configuration. A bottled lemonade with one size and one price doesn’t need variation dropdowns. Creating them would just put another obstacle between a thirsty customer and checkout.

Choose a variable product when customers need to select a defined version, especially when versions have different prices, stock quantities, images, or shipping measurements. A T-shirt with sizes and colors is the familiar retail example. Coffee sold in 250 g and 1 kg bags works the same way.

Keep core options separate from extras

Pizza size and crust type make useful variations because they define the item being ordered. Optional mushrooms, extra cheese, cooking instructions, and “sauce on the side” are usually better handled as add-ons or order fields.

Here’s the catch: every variation attribute multiplies the possible combinations. Three sizes and two crusts create six variations. Add ten toppings as separate yes/no variation attributes, and you’re looking at 6,144 possible combinations. That’s a lot of administration for some extra olives.

For restaurant ordering, FoodMaster is a practical starting point when you also need delivery, pickup, dine-in ordering, POS, kitchen display, QR table ordering, or automatic printing. Its WooCommerce restaurant ordering system brings those workflows together without order commissions, although payment-processing fees can still apply. Confirm that your chosen configuration handles the precise modifiers, pricing rules, and variation-selection flow your menu requires.

Create the Product and Set Up Its Attributes

In WordPress, open Products → Add New. Give the product a customer-friendly name, such as “Margherita Pizza,” then add its description, product image, and category. Keep preparation details and allergen information readable; customers shouldn’t have to interpret an internal kitchen code.

In the Product data dropdown, change Simple product to Variable product. You’ll now configure the attributes that WooCommerce will use to build your purchasable combinations.

Choose reusable or product-specific attributes

Global attributes live under Products → Attributes. Create Size and Crust there, then use Configure terms to add values such as Small, Medium, Large, Classic, and Thin. These attributes can be reused across your catalog and support more consistent filtering and naming.

For a pizzeria with twenty pizzas, global attributes are usually the tidier choice. You don’t want “Large,” “large,” and “12-inch” floating around as accidental alternatives for the same size. Include actual dimensions where useful, and keep them consistent throughout the menu.

Product-specific attributes are created directly inside an individual product’s Attributes tab. They’re useful for one-off options that don’t belong across your catalog. When entering custom values in the classic editor, separate them with a vertical bar: Small | Medium | Large.

Add the attributes to this product

  1. Open the product’s Attributes tab and add or select Size.
  2. Select its applicable global terms, or enter its custom values.
  3. Check Used for variations so WooCommerce can create size-based combinations.
  4. Add Crust with Classic and Thin, and check Used for variations again.
  5. Click Save attributes before moving to the Variations tab.

The Visible on the product page checkbox has a different purpose. It controls whether the attribute appears in the product’s additional-information display; it doesn’t turn that attribute into a variation selector. You can use an attribute for variations without displaying it in that information section.

Put Size before Crust if that matches how people order. Adjust attribute ordering in the editor, and review term ordering for global attributes rather than assuming alphabetical order will make sense. “Large, Medium, Small” is technically sorted, but hardly helpful.

Save the product as a draft. Saving attributes and saving the overall product are separate actions in the classic editing workflow, so don’t rely on one button to preserve everything.

[IMAGE: WooCommerce product Attributes panel showing Size values Small, Medium, and Large and Crust values Classic and Thin, with Used for variations selected for both attributes]

Generate Variations and Set Prices, Images, and Defaults

Open the Variations tab. Use the option to generate variations from all attributes, then confirm the operation. With three sizes and two crusts, WooCommerce can create six combinations.

You can also add variations individually and choose their attribute values. This is the better route when only a few combinations are valid. If Thin crust is available only in Medium and Large, there’s little point creating Small / Thin just to delete it immediately.

If you generate everything, remove the combinations you never intend to sell. For a temporary shortage, use stock settings instead; deleting a variation is unnecessary and can complicate ongoing catalog maintenance.

Build a clear pricing pattern

Expand each variation and enter its regular price. Here’s an illustrative menu, not a recommended pricing model:

  • Small / Classic: $9; Small / Thin: unavailable.
  • Medium / Classic: $12; Medium / Thin: $13.
  • Large / Classic: $15; Large / Thin: $16.

Variation prices are complete item prices, not surcharges. For Medium / Thin, enter $13—not $1 to represent the crust upgrade. WooCommerce’s standard variation pricing doesn’t automatically add a crust surcharge to another variation’s base price.

Enter an optional sale price when a specific combination is discounted. Tax settings determine how entered prices translate into displayed prices, so check the storefront rather than assuming the editor amount is exactly what every customer will see.

A variation without a price generally won’t be purchasable. That makes missing prices one of the first things to check when a product exists in the dashboard but customers can’t order it.

Add useful identifiers and images

Assign unique variation SKUs when your fulfillment or reporting workflow needs them. A pattern such as MARG-M-CL and MARG-L-TH is easier to audit than unrelated codes. Follow the identifier requirements of any connected POS or inventory system.

Variation images help when options look meaningfully different: a deep-pan crust versus a thin base, or a blue shirt versus a red one. If you don’t supply a variation image, the parent product image normally remains the fallback. There’s no need to upload six identical pizza photos.

Use the Variations bulk-actions menu to apply shared prices or other supported changes, then edit exceptions. Check which variations an action affects before applying it, and save the variation changes afterward.

Finally, set Default form values if a preselected combination genuinely helps. Medium / Classic might be sensible, but leaving options unselected avoids quietly choosing a paid preference for the customer. Either approach needs a valid, purchasable combination—and a storefront test to confirm the displayed price is clear.

Configure Stock and Availability Without Overselling

Before entering quantities, decide what a stock number represents. Is it a finished pizza base, a packaged item, or a shared production allowance? WooCommerce can subtract units accurately while still tracking the wrong thing for your kitchen.

Parent-level inventory for a shared supply

Enable stock management in the parent product’s Inventory tab when all variations draw from one shared quantity. Leave individual variation stock management disabled for the variations that should use that parent stock.

For example, imagine a limited batch of 40 identically sized dessert boxes offered with different printed sleeve designs. Each sale consumes one box regardless of sleeve choice, so parent-level inventory can represent that shared supply.

This approach assumes each purchased unit consumes one unit from the pool. It won’t treat a large pizza as two dough portions and a small pizza as one. Also, parent inventory belongs to that product; it isn’t a shared warehouse pool across unrelated products.

Variation-level inventory for separate stock

Enable stock management inside a variation when that combination has its own stock quantity. For packaged pizzas, you might have eight Medium / Classic units and five Large / Thin units. Each variation should then track its own supply.

WooCommerce can also accommodate combinations of parent-managed and individually managed variations, but that setup is easier to misread. Use it only when the stock model is deliberate and tested. A variation with its own managed quantity shouldn’t be treated as automatically decrementing a second, shared ingredient pool as well.

Standard variation inventory does not track recipe ingredients. Selling a Margherita won’t automatically reduce cheese shared with a burger or flour shared with another pizza product. Ingredient-level deductions need a suitable inventory integration or custom implementation with defined recipes and units.

Backorders, visibility, and reservation settings

For managed stock, choose whether backorders are disallowed, allowed with customer notification, or allowed without that notification. For food needed immediately, disallowing backorders is generally the safer starting point. A backordered lunch is rarely the experience someone intended to buy.

Under WooCommerce → Settings → Products → Inventory, review the out-of-stock visibility option. It can affect which sold-out products and variation choices customers see, but the exact selector behavior also depends on the theme and ordering interface. Test the result rather than assuming an unavailable option always disappears.

Review Hold stock for unpaid orders too. Its documented pending-payment behavior isn’t a substitute for testing your payment gateway’s order statuses, reservations, cancellations, and stock restoration. External sales channels and delayed inventory synchronization introduce additional overselling risks.

Keep physical products physical

Within variation settings, Virtual means the item doesn’t require shipping. Don’t mark a pizza virtual merely to hide delivery charges; that can interfere with the fulfillment logic you actually need.

Use the appropriate delivery or pickup configuration instead. For shipped retail items, enter parent weight and dimensions where applicable, override differing measurements on variations, and assign shipping classes where your rates require them.

Make Product Options Easy to Use on Mobile

A technically correct variable product can still be awkward to order. The customer is looking at a small screen, possibly with one hand, and doesn’t know your menu shorthand. “Select Size” works. “Choose attribute_pa_size” does not.

Use labels that explain the decision: Small — 9 inch, Medium — 12 inch, and Large — 15 inch, if those are your actual sizes. Avoid making customers open another page to learn what “Family” means.

Keep the sequence logical: size, crust, then optional extras. Don’t put allergy-related information inside a decorative image or imply that a crust selection alone guarantees freedom from cross-contact. Product information and kitchen procedures need to support whatever claims you make.

Use defaults and swatches carefully

Defaults can speed up repeat orders, but they can also conceal a choice. If you preselect Medium / Classic, show that selection plainly and check that changing to Large / Thin updates the displayed price before the item is added.

WooCommerce’s standard variable-product interface uses dropdowns. Button-style sizes, color circles, and image swatches typically require an additional plugin or theme feature; they aren’t a guaranteed core feature.

If you add a swatch extension, choose it for usability rather than decoration. It needs readable text, a clear selected state, keyboard support, and understandable unavailable states. A pale gray circle with no label isn’t enough to communicate “sold out.”

Test the actual ordering surface

On a phone, select every option without zooming. Then test with a keyboard: reach each control, change selections, see the focus indicator, and activate Add to cart. A screen-reader check should confirm that labels, selection states, and price or availability changes are understandable.

Pay particular attention to impossible combinations. If Small / Thin isn’t offered, the interface should prevent that selection or explain why it can’t be ordered—not leave the customer repeatedly tapping a disabled button.

Restaurant menus, quick-view windows, sticky ordering panels, and QR ordering screens can behave differently from the standard product page. Confirm that each entry point supports choosing variations before adding the item. With FoodMaster or another existing ordering setup, test the actual configuration rather than assuming product-page compatibility guarantees identical behavior everywhere.

[IMAGE: Mobile pizza ordering screen with clearly labeled Size and Crust controls, Medium and Thin selected, a $13 price, and an accessible unavailable state for the Small and Thin combination]

Test an Order and Fix Common Variation Problems

Run a complete test before publishing the menu prominently. Use a staging copy for structural changes and your payment gateway’s supported test mode when appropriate. A successful Add to cart click proves only that one part of the journey works.

  1. Select every valid combination and confirm its price, image, and availability.
  2. Try unavailable combinations and confirm that ordering is blocked clearly.
  3. Add two different variations to the cart and verify their attributes and quantities remain distinct.
  4. Complete checkout and check delivery or shipping charges, taxes, discounts, and payment status.
  5. Inspect the order record and customer emails for the selected size and crust.
  6. Check kitchen tickets, printing, or POS output if those systems are connected.
  7. Verify the correct stock pool decreases, then test your cancellation or refund workflow, including any restock option.

Missing dropdowns

Confirm the product type is Variable product, the attributes are marked Used for variations, and actual variations have been created and saved. Displaying an attribute as additional information doesn’t create a purchasable choice. Also check whether a custom product template or quick-order component is omitting the variation form.

A variation can’t be purchased

Check that the variation is enabled, has a price, and is available under its stock and backorder settings. Confirm the selected combination actually exists. If defaults point to a deleted or unavailable combination, clear them and choose valid defaults.

Missing or incorrect prices

Expand the affected variation rather than looking only at the parent product. Check regular prices, sale prices, sale dates, and whether changes were saved. Then review tax display settings and any pricing extensions that might alter the storefront amount.

Unexpected availability

Inspect both parent and variation inventory settings, including stock status where quantities aren’t managed. Look for backorders, unpaid-order reservations, and external inventory updates. If the saved settings are correct but customers see old information, investigate caching and frontend conflicts on staging.

For the surrounding work, use WPSlash’s tutorial searches to find relevant staging guides, WooCommerce checkout tutorials, and performance tutorials. Those workflows deserve their own checks rather than rushed changes during a live ordering period.

A short launch check

Before launch, confirm that every sellable combination has a price, every stock quantity represents the intended supply, and every ordering interface captures the selected options. Keep a current backup and remove test orders through your normal cleanup process.

The best variable-product setup feels uneventful to the customer: choose a size, choose a crust, see the right price, and order. Keep combinations purposeful and inventory honest, and your staff won’t have to phone customers to ask which pizza they meant.

Commission-free ordering

Run restaurant orders on your own WordPress site

FoodMaster adds delivery, pickup, dine-in, POS, and kitchen tools — with zero per-order fees.

Get FoodMaster

Leave a Comment

Your email address will not be published. Required fields are marked *

×

🔥 ONE DAY ONLY OFFER 🔥

Upgrade FoodMaster Today

Normally your license is limited to 1 Website.

Today only, get a LIFETIME Unlimited Websites License for just:
$499

✔ Unlimited Client Websites
✔ Unlimited Personal Projects
✔ Future Updates Included
✔ Save Hundreds on Additional Licenses

Offer Ends In: