Migrating a fabric & textiles store from WooCommerce to Shopify (2026)
How to migrate a fabric, textiles, or haberdashery WooCommerce store to Shopify — fabric sold by the metre, multiple cut options, material variants, weight/GSM data, swatch samples, and bolt/roll stock management.
Fabric and textiles retailers present one of the more technically complex WooCommerce migration challenges because of "sold by the metre" pricing — a non-standard quantity model that requires special handling in Shopify. The migration also needs to preserve extensive material specification data (composition, weight, width, care instructions) and handle colour/pattern variants that each need accurate swatch photography. Here's how to handle fabric retail correctly on Shopify.
Product types in fabric and textiles
- Dress and fashion fabrics: Cotton, silk, jersey, chiffon — sold by the metre. Colour and pattern variants.
- Home furnishing fabrics: Upholstery fabric, curtain fabric — sold by the metre. Width variants important (137cm vs 280cm).
- Craft and quilting fabrics: Fat quarters, pre-cut bundles, metre-cuts. Collections and colour families.
- Haberdashery: Zips, buttons, thread, elastic, ribbons, interfacing. Fixed units.
- Knitting and crochet yarn: Sold by the ball/skein. Weight (DK, Aran, Chunky), fibre, colour.
- Lace and trimmings: Sold by the metre. Width variants.
- Wadding and interfacing: Sold by the metre or in fixed-size packs.
- Sewing patterns: Digital (PDF) or physical. Size range, difficulty, garment type.
Sold by the metre: Shopify approaches
Shopify doesn't have native "sell by the metre" functionality. Three approaches:
Option A: Variants as cut lengths (most common)
- Create length options as variants: 0.5m, 1m, 1.5m, 2m, 2.5m, 3m, 4m, 5m
- Each variant has the price for that length (e.g., 1m = £9.99, 2m = £19.98, 5m = £49.95)
- If fabric has multiple colours: Option 1 = Length, Option 2 = Colour. Max 100 variants (10 lengths × 10 colours).
- Shopify limit: 3 option types, 100 variants per product. Sufficient for most fabric products.
- Stock management: track by "per metre" equivalent — stock of 50m = stock of 50 at the 1m variant level (divide rolls into equivalent metre units)
Option B: Custom metre input (requires app)
- Customer types desired length (e.g., 2.3m) into a text input box
- Price calculated: quantity × price per metre
- Apps: Quantity Breaks, Custom Line Items app, or custom Shopify app
- Challenge: decimal quantities aren't standard in Shopify checkout
- Workaround: set price per unit to "price per 0.1m" and use integer quantity for 0.1m increments
Option C: Shopify "Sell in multiples" feature (Shopify 2024+)
- Shopify introduced minimum quantity and quantity increments on variants
- Set increment: 0.5m → customer selects 1 (=0.5m), 2 (=1m), 3 (=1.5m), etc.
- Price per unit = price per 0.5m increment
- Cleaner than app workarounds but requires theme support
Fabric metafields
Material specifications
product.metafields.fabric.composition(single_line_text) — "100% Cotton", "65% Polyester 35% Cotton", "Viscose/Linen blend"product.metafields.fabric.weight_gsm(number_integer) — fabric weight in grams per square metreproduct.metafields.fabric.width_cm(number_integer) — fabric width in cm (112, 137, 150, 280, etc.)product.metafields.fabric.stretch(single_line_text) — "None", "2-way stretch", "4-way stretch"product.metafields.fabric.drape(single_line_text) — "Stiff", "Medium", "Drapey", "Very fluid"product.metafields.fabric.opacity(single_line_text) — "Opaque", "Semi-sheer", "Sheer" — critical for fashion fabric buyersproduct.metafields.fabric.pattern_repeat_cm(single_line_text) — "12 × 8 cm pattern repeat" for printed fabricsproduct.metafields.fabric.finish(single_line_text) — "Matte", "Satin", "Metallic", "Brushed", "Pre-washed"
Care instructions
product.metafields.fabric.wash_temp(single_line_text) — "30°C machine wash", "Hand wash only", "Dry clean only"product.metafields.fabric.iron(single_line_text) — "Low heat", "Medium heat", "Do not iron"product.metafields.fabric.tumble_dry(boolean) — tumble dry safe
Usage guidance
product.metafields.fabric.suitable_for(list.single_line_text) — "Dresses", "Blouses", "Quilting", "Upholstery", "Curtains"product.metafields.fabric.difficulty_level(single_line_text) — "Beginner", "Intermediate", "Advanced" — useful for craft/sewing customersproduct.metafields.fabric.pre_wash_recommended(boolean) — whether to pre-wash before cutting
Colour and pattern variants
- Each colour/print is typically a separate product (not a variant) if it has unique images, description, and independent stock
- When colours are variants of the same base fabric: use Colour as a variant option with swatch images
- Variant images: each colour variant needs its own set of images — main swatch photo + on-model/drape/use photo
- Colour swatch on product page: requires theme that shows colour swatch selector (Dawn supports this via color swatches setting)
- Collections: organize by colour family (Blues, Neutrals, Prints) and by usage (Dress Fabrics, Curtain Fabrics)
Swatch samples
Fabric buyers often want to see/feel before buying full metres — swatch orders are common:
- Create a "Fabric Swatch" product: £1–2 per swatch, ships as small letter
- Use a swatch selector app (Swatch King, Product Options by Bold) to link swatches to main fabric products
- Tag:
swatchon sample products for easy filtering in admin - Post-swatch email sequence: follow up 3–5 days after swatch order with "Did you love your swatch?" email linking back to full fabric product
Roll/bolt inventory management
- Fabrics come in rolls/bolts with fixed length (e.g., 30m bolt)
- Stock management: track in metres. A 30m bolt = 30 units at the "per metre" price.
- Last-metre alert: when stock falls below 2m remaining, flag as "only Xm remaining" using low stock metafield or inventory alert
- Remnants: short lengths (0.5m–2m remaining from a roll) — create a "Remnants" collection with discounted pricing. Useful for quilters and crafters.
- WooCommerce inventory: if you tracked stock in metres in WooCommerce, migrate as exact quantity to Shopify.
Haberdashery products
Non-fabric items in a haberdashery (zips, buttons, thread, etc.) are standard Shopify products:
- Zips: variants for length (18cm, 22cm, 30cm, 50cm) and colour. Sold as single units.
- Buttons: sold per single or per card (6 buttons, 10 buttons). Unit clearly stated in title.
- Thread: variants for colour (often 100+ colours). Bobbin weight (small, large).
- Elastic: sold by the metre (same approach as fabric) or in fixed-length packs.
- Interfacing: by the metre or pre-cut sizes (A4 sheets, A0 sheets).
Fabric migration checklist
- Choose metre-selling approach: length variants (recommended for most stores) or metre input app
- Create fabric metafield namespace: composition, weight_gsm, width_cm, stretch, drape, opacity, care instructions
- Migrate all WooCommerce custom field fabric specifications to metafields
- Set up colour variants with per-colour images (swatch photo + use photo)
- Configure inventory in metres for all per-metre products
- Create Swatch Sample product for key fabrics; set up post-swatch email sequence
- Build Remnants collection for sub-2m lengths
- Set up collections by usage (Dress Fabrics, Curtain Fabrics, Quilting) and by colour family
- Configure Search & Discovery filters: Composition, Weight (GSM), Width, Suitable For, Stretch
- Test metre purchase flow: select length, select colour, add to cart, checkout — verify price calculations
- Enable PDF sewing patterns as digital products (Shopify Digital Downloads app)
The "sold by the metre" problem is the most technically distinctive challenge in fabric retail migration, but it's solved with the length variants approach in the vast majority of cases. The deeper value in migrating to Shopify is in the discovery layer: a fabric buyer searching for "navy blue stretch fabric for dresses, 150cm wide" can find it in three filter clicks if the fabric metafields (composition, stretch, width, suitable_for) are correctly populated and exposed as Search & Discovery filters. WooCommerce stores rarely had this level of faceted search without expensive plugins. On Shopify with the Search & Discovery app, it's a configuration task that takes an afternoon and dramatically improves the browsing experience for customers who know what they want but need to find it in a catalogue of hundreds of fabrics.
Migrate your store with k-sync
Connect your WooCommerce store, validate your products, and push to Shopify in minutes. Free for up to 50 products.
Get started freeRelated reading
Migrating a luggage and travel accessories store from WooCommerce to Shopify (2026)
How to migrate a luggage, travel bags, or travel accessories WooCommerce store to Shopify — luggage specifications, airline compliance, TSA lock, warranty and durability claims, and luggage retail Shopify setup.
Migrating a motorcycle accessories store from WooCommerce to Shopify (2026)
How to migrate a motorcycle accessories, biker gear, or motorbike parts WooCommerce store to Shopify — helmet safety standards, CE-rated protective clothing, type approval for parts, fitment compatibility, and motorcycle retail Shopify setup.