Discuss and resolve questions on Liquid, JavaScript, themes, sales channels, and site speed enhancements.
In my store I have a product that has the following variants: color, size and length.
For example I have the following quantities (grouped by size) for this product:
- color: blue, size: 40/54, length: 32, quantity: 5
- color: blue, size: 40/54, length: 34, quantity: 5
- color: blue, size: 40/54, length: 36, quantity: 5
- color: blue, size: 42/56, length: 32, quantity: 5
- color: blue, size: 42/56, length: 34, quantity: 5
- color: blue, size: 42/56, length: 36, quantity: 5
- color: blue, size: 44/58, length: 32, quantity: 0
- color: blue, size: 44/58, length: 34, quantity: 5
- color: blue, size: 44/58, length: 36, quantity: 5
As you can see only the product with size 44/58 and length 32 is sold out, but in my store it displays that everything is available and if the user selects the size 44/58 with the length 32 a random length is chosen for him. How can I fix this? I have a third part theme that doesn't have support and I can't change it with another theme.
Here's the code of the file swatch.liquid that manages the display of the variants:
{% comment %} Set the extension of your color files below. Use 'png', 'jpeg', 'jpg' or 'gif'. {% endcomment %} {% assign file_extension = 'png' %} {% capture variantsswatch %} {% endcapture %} {% if swatch == "Color" %} {% capture variantsswatch %}{{ 'products.variants.color' | t }}{% endcapture %} {% elsif swatch == "Size" %} {% capture variantsswatch %}{{ 'products.variants.size' | t }}{% endcapture %} {% else %} {% capture variantsswatch %}{{ swatch }}{% endcapture %} {% endif %} {% if swatch == blank %} <div class="swatch error"> <p>You must include the snippet swatch.liquid with the name of a product option.</p> <p>Use: <code>{% raw %}{% include 'swatch' with 'name of your product option here' %}{% endraw %}</code></p> <p>Example: <code>{% raw %}{% include 'swatch' with 'Colore' %}{% endraw %}</code></p> </div> {% else %} {% assign found_option = false %} {% assign is_color = false %} {% assign is_lunghezza = false %} {% assign option_index = 0 %} {% assign indexChild = 0 %} {% for option in product.options %} {% if option == swatch %} {% assign found_option = true %} {% assign option_index = forloop.index0 %} {% assign indexChild = forloop.index %} <style rel="stylesheet" type="text/css"> .proVariants .selector-wrapper:nth-child({{ indexChild }}){display: none;} .maxus-productdetail__options:not(:last-child) { margin-right: 20px; } </style> {% assign downcased_option = swatch | downcase %} {% if downcased_option contains 'colore' or downcased_option contains 'colour' or downcased_option contains 'color' %} {% assign is_color = true %} {% endif %} {% if downcased_option contains 'lunghezza' or downcased_option contains 'length' %} {% assign is_lunghezza = true %} {% endif %} {% endif %} {% endfor %} {% unless found_option %} {% else %} <div class="maxus-productdetail__options{% unless section.settings.spd_style == "pd_style2" %} {% endunless %} {% if is_color %}var-colore{% endif %}"> <div class="{% if settings.swatch_style == "sw_radio1" or settings.swatch_style == "sw_radio2" %} swatch_radio1 {% elsif settings.swatch_style == "sw_radio3" or settings.swatch_style == "sw_radio4" %} swatch_radio3 {% elsif settings.swatch_style == "sw_rectangle1" or settings.swatch_style == "sw_rectangle2" or settings.swatch_style == "sw_gallery" %} swatch_rectangle1 {% endif %}swatch clearfix {% if settings.po_style == "po_swatchs" %} align-center flex engoc-flex-wrap{% endif %}" data-option-index="{{ option_index }}"> <!-- <p class="text-uppercase title_variant" style="border-bottom:none;padding-bottom:none;">{{ variantsswatch }} </p> --> {% if variantsswatch == 'Colore' %} <p class="text-uppercase title_variant" style="border-bottom:none;padding-bottom:none;">Colore </p> {% elsif variantsswatch == 'Taglia' %} <p class="text-uppercase title_variant" style="border-bottom:none;padding-bottom:none;">Taglia </p> {% elsif variantsswatch == 'Lunghezza' %} <p class="text-uppercase title_variant" style="margin-left:6px;border-bottom:none;padding-bottom:none;">Lunghezza </p> {% endif %} {% assign values = '' %} {% for variant in product.variants %} {% assign value = variant.options[option_index] %} {% unless values contains value %} {% assign values = values | join: ',' %} {% assign values = values | append: ',' | append: value %} {% assign values = values | split: ',' %} {% assign unique_variant_id = variant.id | append: '-' | append: value | append: '-' | append: option_index %} {% assign available = false %} {% if variant.available %} {% assign available = true %} {% else %} {% comment %} Check if any other variant with the same size is available {% endcomment %} {% for other_variant in product.variants %} {% if other_variant != variant and other_variant.options[option_index] == value and other_variant.available %} {% assign available = true %} {% break %} {% endif %} {% endfor %} {% endif %} {% if is_color %} <div data-value="{{ value | escape }}" data-style="square" class="maxus-color none color {{ value | handle }} {% if available %} available {% else %}soldout{% endif %}" {% if available %}{% else %}data-toggle="tooltip" data-placement="top" data-html="true" data-original-title="Coming Soon <br> NOTIFY ME"{% endif %}> <input id="swatch-{{ option_index }}-{{ value | handle }}" type="radio" name="option-{{ option_index }}" value="{{ value | escape }}"{% if forloop.first %} checked{% endif %} {% unless available %}disabled{% endunless %} /> {% if settings.swatch_style == "sw_radio1" or settings.swatch_style == "sw_radio3" %} <label class="radio_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <label class="color_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> </label> <span class="text_color">{{ value }}</span> </label> {% elsif settings.swatch_style == "sw_radio2" %} <div class="radio_style2" data-toggle="tooltip" data-placement="top" data-original-title="{{value}}"> <label class="color_style2" for="swatch-{{ option_index }}-{{ value | handle }}" style="background-image: url({{ variant.image.src | product_img_url: 'grande' }}); background-size: cover;"> </label> </div> {% elsif settings.swatch_style == "sw_rectangle1" %} <label class="rectangle_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <span class="text_rec">{{ value }}</span> </label> {% elsif settings.swatch_style == "sw_gallery" %} <div class="swatch_gallery"> <label class="bg_image" for="swatch-{{ option_index }}-{{ value | handle }}" style="background-color: {{ value | split: ' ' | last | handle }}; background-image: url({{ value | handle | append: '.' | append: file_extension | file_url }}); background-size: cover;"> </label> </div> {% elsif settings.swatch_style == "default" or settings.swatch_style == "sw_radio4" or settings.swatch_style == "sw_rectangle2" %} <div class=" border-color "> <label class="link_color" for="swatch-{{ option_index }}-{{ value | handle }}" style="background-color: {{ value | split: ' ' | last | handle }}; background-image: url({{ value | handle | append: '.' | append: file_extension | file_url }}); background-size: cover;"> </label> </div> {% endif %} </div> {% elsif is_lunghezza %} <div data-value="{{ value | escape }}" data-style="square" class="maxus-color none length colora-nero {{ value | handle }} {% if available %} available {% else %}soldout{% endif %}" {% if available %}{% else %}data-toggle="tooltip" data-placement="top" data-html="true" data-original-title="Coming Soon <br> NOTIFY ME"{% endif %}> <input id="swatch-{{ option_index }}-{{ value | handle }}" type="radio" name="option-{{ option_index }}" value="{{ value | escape }}"{% unless available %} disabled{% endunless %} /> {% if settings.swatch_style == "sw_radio1" or settings.swatch_style == "sw_radio2" or settings.swatch_style == "sw_radio3" or settings.swatch_style == "sw_radio4" %} <label class="radio_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <label class="color_style1" for="swatch-{{ option_index }}-{{ value | handle }}" > </label> <span class="text_color">{{ value }}</span> </label> {% elsif settings.swatch_style == "sw_rectangle1" or settings.swatch_style == "sw_rectangle2" or settings.swatch_style == "sw_gallery" %} <label class="rectangle_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <span class="text_rec">{{ value }}</span> </label> {% elsif settings.swatch_style == "default" %} <label class="variant_other" for="swatch-{{ option_index }}-{{ value | handle }}" > {{ value }} </label> {% endif %} </div> {% else %} <div data-value="{{ value | escape }}" data-style="square" class="maxus-color none taglia {{ value | handle }} {% if available %} available {% else %}soldout{% endif %}" {% if available %}{% else %}data-toggle="tooltip" data-placement="top" data-html="true" data-original-title="Coming Soon <br> NOTIFY ME"{% endif %}> <input id="swatch-{{ option_index }}-{{ value | handle }}" type="radio" name="option-{{ option_index }}" value="{{ value | escape }}" {% unless available %} disabled{% endunless %} /> {% if settings.swatch_style == "sw_radio1" or settings.swatch_style == "sw_radio2" or settings.swatch_style == "sw_radio3" or settings.swatch_style == "sw_radio4" %} <label class="radio_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <label class="color_style1" for="swatch-{{ option_index }}-{{ value | handle }}" > </label> <span class="text_color">{{ value }}</span> </label> {% elsif settings.swatch_style == "sw_rectangle1" or settings.swatch_style == "sw_rectangle2" or settings.swatch_style == "sw_gallery" %} <label class="rectangle_style1" for="swatch-{{ option_index }}-{{ value | handle }}"> <span class="text_rec">{{ value }}</span> </label> {% elsif settings.swatch_style == "default" %} <label class="variant_other" for="swatch-{{ option_index }}-{{ value | handle }}" > {{ value }} </label> {% endif %} </div> {% endif %} {% endunless %} {% endfor %} </div> </div> {% endunless %} {% endif %}
Starting a B2B store is a big undertaking that requires careful planning and execution. W...
By JasonH Sep 23, 2024By investing 30 minutes of your time, you can unlock the potential for increased sales,...
By Jacqui Sep 11, 2024We appreciate the diverse ways you participate in and engage with the Shopify Communi...
By JasonH Sep 9, 2024