About the Plugin
Gem availability is not a property of a product; it is a property of each variation, and a piece can take more than one stone. The Hera Gem End offers 4 gem types at 1.5mm but 9 at 4mm. A Captive Gem Bead End offers 4 types in gold and 3 in stainless. A 2-Tiered Navel Curve takes three stones - two 4mm in “Gem 1” and one 6mm in “Gem 2” - and the allowed types differ between stainless and titanium.
Native WooCommerce variations cannot express that. Folding gems into the variation matrix would need roughly 5,900 variations for the Hera alone, and about 36,700 product-gem combinations across the catalogue. This plugin keeps the gems out of the matrix entirely: a variation carries its gem positions, and the customer picks a stone for each one in a dedicated panel.
Key Features
- 💎 The Catalogue Ships With The Plugin: 244 gem groups, 2,132 colours and 448 WebP swatches bundled as data - no gem products to import and no media library entries.
- 📌 Per-Variation Availability: 5,959 variations mapped to the gem positions they actually offer, keyed by variation SKU so bindings survive a re-import.
- 🔗 Multiple Gem Positions: A piece with “Gem 1” and “Gem 2” asks for each, with its own size and its own list of permitted types.
- 🔍 Searchable Swatch Grid: Stones are shown as swatches grouped under sticky type headings, with a search box - because names repeat across types, and Aqua Blue exists as both Passion Topaz and Zirconia.
- 📱 Drawer On Desktop, Sheet On Phones: The median variation hides 67 colours behind its pickers and the heaviest offers 586, so selection moved off the product page into a three-step panel.
- ✨ Sandblasting Offered And Priced: A real Anatometal product charged per gem, so a three-stone piece pays it three times.
- 💰 Pricing Without A Rebuild: The catalogue holds supplier list prices in USD; a multiplier and rounding rule turn them into store prices from the settings screen.
- 🛒 One Cart Row Per Piece: The gem rides on the jewellery line item rather than becoming its own line - one cart row, one packing-slip row, with gem SKUs saved as order meta so staff know which stones to pull.
- 🔒 Server-Side Revalidation: A posted gem SKU is resolved only within the groups that position allows, and priced from the catalogue rather than the form, so prices cannot be manipulated.
- ♿ Never Pre-Selected: No stone is chosen by default - a default would ship a customer cubic zirconia when they saw a blue gem in the photo.
- ♿ Keyboard Accessible: Focus trap, Escape to close, focus restored on close, ARIA dialog semantics and a labelled progress list.
Perfect For
- Anatometal Stockists: Any WooCommerce store carrying the Anatometal range with gem-set pieces.
- Body Jewellery Retailers: Shops whose products have per-variation add-ons that the variation matrix cannot hold.
- Stores Drowning In Variations: Anyone whose gem options would otherwise multiply into tens of thousands of rows.
🎯 How It Works
On a gem-set product the customer picks their metal and size as usual, then opens the gemstone panel. Step one asks about sandblasting; step two shows every stone that variation can take as a grid of swatches, grouped by type and searchable. A piece with several stones is asked once whether the same gemstone should be used for every placement. Add-to-cart is blocked with a clear message until every position is filled, and the server re-validates the choice before pricing it from the bundled catalogue.
Installation Instructions
- Import the Jewellery CSV: Gem products are not required and should not be imported.
- Download the Plugin: Click the download button to get the latest version.
- Upload to WordPress: Go to Plugins → Add New → Upload Plugin, then select the downloaded zip file.
- Activate the Plugin: Click “Activate Plugin” after the upload completes.
- Set Your Pricing: Navigate to WooCommerce → Gem Selector and set the price multiplier and rounding rule. The settings screen shows worked examples.
⚠️ Requirements
WordPress: 6.0 or higher
WooCommerce: 7.0 or higher
PHP: 7.4 or higher
License: GPLv2 or later