How to add multiple options to a single product in WooCommerce
WooCommerce calls multiple versions of one product variations — a shirt in three sizes, a phone in two colors, a coffee maker with or without a grinder. Instead of creating three separate product listings, you build one product and define the options customers choose from. The customer picks their size or color on the product page, and the price or stock level can change based on what they select.
The process happens in the product editor under the Attributes tab. You first create the attribute itself (like "Size" or "Color"), then assign values to it (like "Small," "Medium," "Large"), then tell WooCommerce to generate a variation for each combination. This takes about five minutes per product once you understand the steps.
Key Takeaways
- Attributes are the option names (Size, Color, Material), and attribute values are the choices within each option (Small, Medium, Large).
- You can reuse the same attribute across multiple products, so creating "Size" once means you can explore it to shirts, pants, and hats without rebuilding it.
- Each variation can have its own price, stock count, and product image, so a large shirt can cost more than a small one if you need it to.
- WooCommerce generates variations automatically once you assign attributes and values, rather than requiring you to create each one manually.
Creating attributes before you build variations
Before you can add variations to a product, you need to create the attributes themselves. Log into your WordPress dashboard, go to Products in the left menu, then click Attributes. You will see a form to create a new attribute.
Type the attribute name — "Size," "Color," "Material," or whatever option your product needs. Leave the slug field alone; WordPress fills it automatically. In the Values box, type each option separated by a line break: Small, Medium, Large. Do not use commas; press Enter after each value. Check the box for Visible on the product page so customers see the option. Then click Add attribute.
Repeat this for each attribute your product needs. If you are selling a shirt in three sizes and two colors, create one "Size" attribute with three values and one "Color" attribute with two values. You can reuse these attributes on other products later, so the time you spend now saves time on the next product.
Assigning attributes to your product
Open the product you want to add variations to. Scroll down to the Product data section and click the Attributes tab. You will see a dropdown labeled Add attribute. Click it and select the attribute you created — "Size," for example.
Once you select it, the attribute appears in a box below. Check the box labeled Visible on the product page so customers see it. Then click the Select all link to choose every value you created for that attribute, or click individual values if you only want to offer some sizes. Click Add attribute to save it.
If your product has multiple options — size and color, for instance — repeat this step for each attribute. Add "Size," then add "Color." WooCommerce will create a variation for every combination: Small + Red, Small + Blue, Medium + Red, Medium + Blue, and so on.
Generating variations from your attributes
Once you have assigned all your attributes, scroll down to the Variations tab, still in the Product data section. You will see a message saying no variations exist yet, with a button labeled Create variations from all attributes. Click it.
WooCommerce will generate a variation for every combination of the values you selected. If you assigned Size (Small, Medium, Large) and Color (Red, Blue), it creates six variations. This takes a few seconds. Once it finishes, you will see a list of every variation with fields to set the price, stock, and image for each one.
You do not have to set a different price or image for every variation — if all sizes cost the same, you can leave the price blank on each variation and WooCommerce will use the base product price. But if a large shirt costs more than a small one, or if you want to show a different photo for the blue version, you can set those details here.
Setting price and stock for each variation
Click on any variation in the list to expand it. You will see fields for Price, Stock quantity, and Image. If you want that variation to cost more or less than the base product price, enter a price. If you want to track stock separately for each size or color, enter a stock number. Leave these blank if all variations share the same price and stock.
To add a photo for a specific variation, click Set image and select or upload a photo. This is useful if you are selling a shirt in different colors and want to show what the blue version actually looks like. If you do not set an image, the product's main image appears for all variations.
You can edit variations one at a time or use the bulk edit feature at the top of the Variations tab to change the price or stock for multiple variations at once. Once you finish, click Save changes at the bottom of the page.
What customers see on the product page
When a customer visits your product page, they will see dropdown menus or buttons for each attribute you created. If you set up Size and Color, they see a Size dropdown and a Color dropdown. They select their choices, and the price updates if you set different prices for different variations.
The product page also shows stock status for each variation. If you set stock quantities, WooCommerce tells the customer whether their chosen size and color is in stock. If a variation runs out, the customer cannot add it to their cart.
When they click Add to cart, WooCommerce adds the specific variation — not just "shirt," but "shirt, size medium, color blue" — to their cart. The order confirmation and shipping label will show exactly which variation they ordered.
Reusing attributes on other products
Once you create an attribute like "Size" or "Color," you can use it on any other product without rebuilding it. Open a different product, go to the Attributes tab, click Add attribute, and select "Size" from the dropdown. Assign the values you want for that product, then generate variations the same way.
This saves time because you are not typing "Small, Medium, Large" again. It also keeps your store consistent — all your products use the same attribute names and values, which makes filtering and searching work better for customers.
If you sell many products with the same options, spend a few minutes creating a complete set of attributes at the start. Then adding variations to new products becomes a three-step process: assign attributes, select values, generate variations.
Frequently Asked Questions
Can I change a variation's price after I create it?
Yes. Go to the product, click the Variations tab, expand the variation you want to change, and edit the Price field. Click Save changes. The new price appears on the product page when ready.
What happens if I delete a variation?
The variation disappears from the product page and customers cannot order it anymore. If someone already ordered that variation, their order record stays intact. You can recreate the variation later by generating variations again from your attributes.
Do I have to set a different image for every variation?
No. If you do not set an image for a variation, the main product image appears. Set images only for variations where the visual difference matters — like different colors — or skip it if all variations look the same.
Can I have more than two attributes per product?
Yes. You can create and assign as many attributes as you need. Keep in mind that WooCommerce creates a variation for every combination, so three attributes with three values each creates 27 variations. More variations mean more rows to manage, but the system handles it.
What if I only want to offer certain combinations?
Generate all variations first, then delete the ones you do not want to sell. For example, if you make a shirt in Small and Medium, but only in Red and Blue, generate all four variations, then delete Medium + Blue if you do not stock it. Customers will only see the combinations that remain.