{"id":372142,"date":"2026-09-25T02:35:17","date_gmt":"2026-09-25T02:35:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/swatchkit-variation-swatches\/"},"modified":"2026-09-25T20:52:40","modified_gmt":"2026-09-25T20:52:40","slug":"swatchkit-variation-swatches","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/swatchkit-variation-swatches\/","author":17120676,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"SwatchKit \u2013 Variation Swatches","header_author":"ModinaTheme","header_description":"Color, image & size variation swatches for WooCommerce. Built on native WooCommerce attributes. Fast, unlimited variations, no jQuery.","assets_banners_color":"7f7aad","last_updated":"2026-09-25 20:52:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/modinatheme.com\/swatchkit","header_author_uri":"https:\/\/modinatheme.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"modinatheme","date":"2026-09-25 02:34:59","revision":3712258},"1.1.0":{"tag":"1.1.0","author":"modinatheme","date":"2026-09-25 20:52:40","revision":3713566}},"upgrade_notice":{"1.1.0":"<p>Multi-colour swatches, a shortcode, more style settings, and fixes for the Clear link and for colours disappearing after a product save.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712258,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712258,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712258,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712258,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3713566,"resolution":"1","location":"assets","locale":"","width":1248,"height":648},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3713566,"resolution":"2","location":"assets","locale":"","width":1240,"height":820},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3713566,"resolution":"3","location":"assets","locale":"","width":1248,"height":1056},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3713566,"resolution":"4","location":"assets","locale":"","width":1248,"height":781},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3713566,"resolution":"5","location":"assets","locale":"","width":1240,"height":820},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3713566,"resolution":"6","location":"assets","locale":"","width":933,"height":654},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3713566,"resolution":"7","location":"assets","locale":"","width":1240,"height":820},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3713566,"resolution":"8","location":"assets","locale":"","width":993,"height":436}},"screenshots":{"1":"Colour and size swatches on a product page, with a tooltip and a multi-colour swatch","2":"The settings screen, with a live preview that uses your real storefront styles","3":"Swatches on shop and category cards \u2014 pick a colour and the card's image follows","4":"Correct out-of-stock and unavailable states on a 1,200-variation product","5":"Colour swatches on the attribute term screen","6":"Per-product swatch type and shape overrides","7":"Stock behaviour: cross out, blur, dim or hide","8":"System status, for quick support answers"}},"plugin_section":[],"plugin_tags":[66595,65874,130912,206658,142374],"plugin_category":[],"plugin_contributors":[282613],"plugin_business_model":[],"class_list":["post-372142","plugin","type-plugin","status-publish","hentry","plugin_tags-product-attributes","plugin_tags-variable-products","plugin_tags-variation-swatches","plugin_tags-woocommerce-color-swatches","plugin_tags-woocommerce-swatches","plugin_contributors-modinatheme","plugin_committers-modinatheme"],"banners":{"banner":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/banner-772x250.png?rev=3712258","banner_2x":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/banner-1544x500.png?rev=3712258","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/icon-128x128.png?rev=3712258","icon_2x":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/icon-256x256.png?rev=3712258","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-1.png?rev=3713566","caption":"Colour and size swatches on a product page, with a tooltip and a multi-colour swatch"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-2.png?rev=3713566","caption":"The settings screen, with a live preview that uses your real storefront styles"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-3.png?rev=3713566","caption":"Swatches on shop and category cards \u2014 pick a colour and the card's image follows"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-4.png?rev=3713566","caption":"Correct out-of-stock and unavailable states on a 1,200-variation product"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-5.png?rev=3713566","caption":"Colour swatches on the attribute term screen"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-6.png?rev=3713566","caption":"Per-product swatch type and shape overrides"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-7.png?rev=3713566","caption":"Stock behaviour: cross out, blur, dim or hide"},{"src":"https:\/\/ps.w.org\/swatchkit-variation-swatches\/assets\/screenshot-8.png?rev=3713566","caption":"System status, for quick support answers"}],"raw_content":"<!--section=description-->\n<p><strong>Your customer picks Black, then XXL, and finds out at the cart that the combination was never made.<\/strong> They do not email you about it. They leave.<\/p>\n\n<p>SwatchKit turns WooCommerce's variation dropdowns into colour, image and size swatches \u2014 and keeps them honest, so what is sold out looks sold out and what does not exist cannot be clicked. On a product with 12 variations or 5,000.<\/p>\n\n<p>\ud83d\udc49 <strong><a href=\"https:\/\/modinatheme.com\/swatchkit\/landing\/demo\/\">Try the live demo<\/a><\/strong> \u2014 click real swatches on a 1,200-variation product, change every setting, no install needed.\n\ud83d\udcd6 <strong><a href=\"https:\/\/modinatheme.com\/swatchkit\/docs\/\">Read the documentation<\/a><\/strong><\/p>\n\n<p>\ud83c\udfa5 <strong>Watch it work in three minutes:<\/strong><\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=Bhk81zbX9x4<\/p>\n\n<h4>\ud83c\udfaf Why swatches stop being right (and why this one does not)<\/h4>\n\n<p>WooCommerce stops sending variation data to the browser once a product passes <code>woocommerce_ajax_variation_threshold<\/code> \u2014 30 variations by default. After that, plugins that lean on that data cannot tell which combinations are out of stock, or which were never built. Every swatch looks available.<\/p>\n\n<p>The usual advice is to raise the threshold. That pushes your entire variation table into the page and makes it slower for everyone.<\/p>\n\n<p>SwatchKit does the opposite. When you save a product it builds a compact availability index \u2014 about 2.8KB gzipped for 1,200 variations \u2014 and the browser resolves state from it in under a millisecond, without asking the server anything.<\/p>\n\n<ul>\n<li>\u274c Sold out \u2192 crossed out<\/li>\n<li>\ud83d\udeab Never existed \u2192 greyed out and unclickable<\/li>\n<li>\u26a1 No AJAX, no spinner, no threshold to raise<\/li>\n<\/ul>\n\n<p><strong>Free. At any variation count. No upgrade prompt.<\/strong><\/p>\n\n<h4>\ud83e\uddec Built on WooCommerce's own data<\/h4>\n\n<p>WooCommerce 10.9 added a first-party Color\/Image attribute type (<code>wc-visual<\/code>). SwatchKit reads and writes that same core term meta and mirrors it into its own keys, so nothing breaks if you switch the feature off.<\/p>\n\n<p>Translation: your colours and images belong to your store, not to a plugin you are now stuck with. Everything core left out \u2014 size and label swatches, stock states, tooltips, shop-page swatches, per-product overrides, classic themes \u2014 SwatchKit adds on top.<\/p>\n\n<p>Already using another swatch plugin? <strong>Tools \u2192 Import<\/strong> copies colours and images from GetWooPlugins, Brainstorm Force, RadiusTheme and WCBoost. It shows a preview before writing anything, never touches their data, and can be undone. \ud83d\udd04<\/p>\n\n<h4>\ud83c\udf81 Free, and staying free<\/h4>\n\n<p>The things this category usually puts behind a licence:<\/p>\n\n<ul>\n<li>\ud83c\udfa8 <strong>Colour, image and size\/label swatches<\/strong> \u2014 all three types, no limits<\/li>\n<li>\ud83d\udecd\ufe0f <strong>Shop and category page swatches<\/strong> \u2014 picking one previews that variation's image on the card and opens the product with it already selected<\/li>\n<li>\ud83d\uddbc\ufe0f <strong>Image swatches<\/strong> from your Media Library, with fill or fit cropping, hover zoom and image tooltips<\/li>\n<li>\ud83c\udf08 <strong>Multi-colour swatches<\/strong> \u2014 two to four colours per term, for two-tones, stripes and marled fabrics<\/li>\n<li>\ud83e\ude84 <strong>Colours from term names<\/strong> \u2014 a built-in table of 300+ names means an imported catalog shows colours before you set a single value<\/li>\n<li>\ud83d\udce6 <strong>Out-of-stock styles<\/strong> \u2014 cross out, blur, dim or hide, at any variation count<\/li>\n<li>\ud83c\udf9b\ufe0f <strong>Per-product type and shape overrides<\/strong> \u2014 circles here, pills there<\/li>\n<li>\u2699\ufe0f <strong>Quick view, AJAX load-more and infinite scroll<\/strong> \u2014 new forms are picked up automatically<\/li>\n<li>\ud83e\udde9 <strong>Theme and page-builder compatibility<\/strong> \u2014 never a paid feature here<\/li>\n<\/ul>\n\n<p>A separate Pro add-on is coming for shop-card add to cart and low-stock markers. Nothing on the list above will ever move into it.<\/p>\n\n<h4>\u23f1\ufe0f Set up in 60 seconds<\/h4>\n\n<ol>\n<li>Activate. Every variation dropdown is already a swatch. \ud83c\udf89<\/li>\n<li>Want real colours? <strong>Products \u2192 Attributes<\/strong>, set the attribute to Color or Image, edit its terms.<\/li>\n<li>Want it to match your theme? <strong>WooCommerce \u2192 Swatches<\/strong> \u2014 shape, size, spacing, borders, tooltips, stock styles and shop cards, each with a live preview that uses your real storefront stylesheet.<\/li>\n<\/ol>\n\n<p>Settings export to a file and import on your next site, so your second store takes a minute rather than twenty. \ud83d\udcbe<\/p>\n\n<h4>\u26a1 Light, and quiet in your admin<\/h4>\n\n<p>The storefront bundle is dependency-free vanilla JavaScript: <strong>3.9KB of JS and 1.9KB of CSS<\/strong>, gzipped, loaded only where swatches appear. Swatches render server-side at their final size, so nothing jumps while the page loads, and everything works behind a page cache.<\/p>\n\n<p>No tracking. No outbound requests of any kind. No dashboard banners, no review nag, no greyed-out settings advertising an upgrade. The settings screen is the only place SwatchKit appears in your admin. \ud83e\udd2b<\/p>\n\n<h4>\u267f Accessible by construction<\/h4>\n\n<p>Swatches are real <code>&lt;button&gt;<\/code> elements in a <code>role=\"radiogroup\"<\/code> with a roving tabindex, arrow-key and Home\/End navigation, and a focus ring that survives theme resets. Stock state is conveyed in text, not colour alone, so a screen reader hears \"Blue, out of stock\". The selected checkmark picks black or white from the swatch's own luminance, and <code>prefers-reduced-motion<\/code> turns every transition off.<\/p>\n\n<h4>\ud83e\uddd1\u200d\ud83d\udcbb For developers<\/h4>\n\n<ul>\n<li><strong>No WooCommerce template is ever overridden.<\/strong> SwatchKit filters <code>woocommerce_dropdown_variation_attribute_options_html<\/code> \u2014 the biggest source of theme conflicts, avoided structurally rather than patched.<\/li>\n<li><strong>The original <code>&lt;select&gt;<\/code> stays<\/strong> in the DOM and remains the source of truth for submission. SwatchKit writes to it and dispatches a native <code>change<\/code> event, so WooCommerce's own handlers run normally \u2014 which is why quick view, bundle and composite plugins work without vendor-specific hacks.<\/li>\n<li><strong>Everything visual is a CSS custom property<\/strong> on <code>.swk-swatches<\/code>. Restyle by redefining variables; there is no <code>!important<\/code> to fight.<\/li>\n<li><strong>Documented hooks<\/strong>, including <code>swatchkit_swatch_html<\/code>, <code>swatchkit_swatch_classes<\/code>, <code>swatchkit_attribute_type<\/code>, <code>swatchkit_should_render<\/code>, <code>swatchkit_term_color<\/code>, <code>swatchkit_term_image_id<\/code>, <code>swatchkit_index_payload<\/code>, <code>swatchkit_settings<\/code>, <code>swatchkit_card_terms<\/code>, <code>swatchkit_card_placement<\/code>, <code>swatchkit_before_swatches<\/code> and <code>swatchkit_after_swatches<\/code>.<\/li>\n<li><strong>Add-on API<\/strong> for registering swatch types and adding settings to the same schema-driven screen.<\/li>\n<li><code>add_theme_support( 'swatchkit', array( 'stylesheet' =&gt; false ) )<\/code> to ship your own styles.<\/li>\n<li><strong>JS API:<\/strong> <code>window.SwatchKit.refresh()<\/code>, <code>.on( event, callback )<\/code> and <code>.version<\/code>. Dispatch <code>swatchkit:refresh<\/code> on <code>document<\/code> after injecting your own markup.<\/li>\n<li><strong>Shortcode:<\/strong> <code>[swatchkit product_id=\"123\"]<\/code> renders a product's swatches anywhere \u2014 page builders, landing pages, custom grids.<\/li>\n<li>Unminified JavaScript and SCSS ship in <code>assets\/<\/code>; <code>npm install &amp;&amp; npm run build<\/code> rebuilds <code>build\/<\/code>.<\/li>\n<\/ul>\n\n<p>Built by <a href=\"https:\/\/modinatheme.com\/\">ModinaTheme<\/a>. WordPress 6.2+, WooCommerce 8.0+, PHP 7.4+, HPOS compatible.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Every variable-product attribute dropdown becomes a swatch immediately \u2014 there is nothing to configure.<\/li>\n<li>To set colours or images per term, go to Products \u2192 Attributes, set an attribute's type to Color or Image swatch, then edit its terms. Colours use a colour picker; images are chosen from the Media Library.<\/li>\n<li>Global settings live under WooCommerce \u2192 Swatches, also linked as \"Settings\" on the Plugins screen.<\/li>\n<\/ol>\n\n<p>The <a href=\"https:\/\/modinatheme.com\/swatchkit\/docs\/\">documentation<\/a> covers every setting, image swatches, troubleshooting and the developer API.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20image%20swatches%20free%3F\"><h3>Are image swatches free?<\/h3><\/dt>\n<dd><p>Yes. Colour, image and size\/label swatches are all free, including image tooltips, hover zoom and fill\/fit cropping.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20configure%20anything%3F\"><h3>Do I have to configure anything?<\/h3><\/dt>\n<dd><p>No. On activation every variation dropdown becomes a button swatch. Setting an attribute's type to Color or Image is optional.<\/p><\/dd>\n<dt id=\"does%20it%20really%20work%20with%20thousands%20of%20variations%3F\"><h3>Does it really work with thousands of variations?<\/h3><\/dt>\n<dd><p>Yes, and that is the main reason it exists. Availability is computed once when a product is saved and stored in its own database table, then read back as a single cached query and resolved in the browser with integer set intersection. A 1,200-variation product inlines about 14.7KB of JSON, roughly 2.8KB gzipped.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20my%20existing%20swatch%20plugin%3F\"><h3>Will it conflict with my existing swatch plugin?<\/h3><\/dt>\n<dd><p>Two swatch plugins filtering the same dropdown will conflict. Deactivate the other one first. WooCommerce \u2192 Swatches \u2192 Tools lists any it detects.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>It does not override any WooCommerce template, which is what usually breaks themes. If your theme still needs a CSS nudge, open a support thread and it will ship as a compatibility stylesheet.<\/p><\/dd>\n<dt id=\"is%20my%20data%20locked%20in%3F\"><h3>Is my data locked in?<\/h3><\/dt>\n<dd><p>No. Where your WooCommerce version supports core's visual attributes, SwatchKit writes to core's own term meta as well as its own. Uninstalling removes nothing unless you explicitly enable cleanup in Advanced settings, and core's meta is never deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Multi-colour swatches: two to four colours per term, as a diagonal split or wedges.<\/li>\n<li>Colours you never set are read from the term name, so imported catalogs show colours immediately.<\/li>\n<li><code>[swatchkit]<\/code> shortcode for showing a product's swatches anywhere.<\/li>\n<li>Shop cards: new \"Before the title\" position, optional attribute name, and correct placement in Astra.<\/li>\n<li>Settings: spacing, alignment, label and tooltip colours, image fit and tooltip image size.<\/li>\n<li>Tools: export and import settings as a file.<\/li>\n<li>Fixed: WooCommerce's \"Clear\" link left swatches looking selected.<\/li>\n<li>Fixed: product colours could disappear after saving a product.<\/li>\n<li>Fixed: a PHP notice about translations loading too early.<\/li>\n<li>For developers: new hooks for add-ons \u2014 see the documentation.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Color, image and size\/label swatches.<\/li>\n<li>Availability index: correct swatch state at any variation count, with no AJAX.<\/li>\n<li>Unlimited out-of-stock handling \u2014 cross out, blur, dim or hide.<\/li>\n<li>Distinct handling for unavailable combinations.<\/li>\n<li>Native WooCommerce <code>wc-visual<\/code> attribute interoperability, with mirrored fallback meta.<\/li>\n<li>Tooltips, hover zoom, selected-term display and clear-selection link.<\/li>\n<li>Shop and category page swatches.<\/li>\n<li>Per-product swatch type and shape overrides.<\/li>\n<li>Tabbed settings dashboard with a live preview.<\/li>\n<li>WCAG 2.1 AA keyboard and screen-reader support.<\/li>\n<li>Dependency-free frontend: 2.8KB JS, 1.2KB CSS gzipped.<\/li>\n<\/ul>","raw_excerpt":"Color, image and size variation swatches for WooCommerce. Still correct past 30 variations. Shop swatches free, under 4KB, no jQuery.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/372142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=372142"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/modinatheme"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=372142"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=372142"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=372142"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=372142"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=372142"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=372142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}