0
votes

I'm trying to prevent that sold out products will be shown on related products section in my Shopify store. I tried to use {% if product.available %} in the beginning of the code but without success.

Here is the code of this section -

{% if collection and collection.all_products_count > 1 %}
  {% assign col = collection.handle %}
{% else %}
  {% assign col = product.collections.last.handle %}
{% endif %}

{% for tag in product.tags %}
  {% if tag contains 'meta-related-collection-' %}
    {% assign related_collection_handle = tag | remove: 'meta-related-collection-' %}
    {% if collections[related_collection_handle].all_products_count > 0 %}
      {% assign col = related_collection_handle %}
      {% assign collection = collections[col] %}
    {% endif %}
  {% endif %}
{% endfor %}

{% if col %}
  {% if collections[col].all_products_count != 1 or collections[col].products.first.id != product.id %}
    {% assign skip_product = product %}
    {% assign products = collections[col].products %}
    {% unless sidebar %} <div class="container"> {% endunless %}
      <div class="related-products__title {% unless section.settings.related_products_style == 'slider' %}{% if sidebar %}twelve columns{% else %}sixteen columns{% endif %}{% endunless %}">
        <h4 class="title center">{{ 'products.product.related_items' | t }}</h4>
        <div class="feature_divider"></div>
      </div>
      <div class="clear"></div>
    {% unless sidebar %} </div> {% endunless %}

    {% if section.settings.related_products_style == 'slider' %}
      {% assign limit = section.settings.related_products_limit %}
      <div class="related-products related-products--slider js-related-products-slider">
        {% if col and collections[col].all_products_count > 0 and product.available %}
          {% include 'product-slider', related_products: true %}
        {% endif %}
      </div>

    {% else %}
      {% assign limit = section.settings.related_products_limit | plus: 1 %}
      {% assign products_per_row = section.settings.products_per %}
      {% if col and collections[col].all_products_count > 0 and product.available %}
        {% unless sidebar %}<div class="container related-products--grid">{% endunless %}
          <div class="{% if sidebar %}twelve{% else %}sixteen{% endif %} columns">
            {% include 'product-loop', related_products: true %}
          </div>
        {% unless sidebar %}</div>{% endunless %}
      {% endif %}
    {% endif %}
  {% endif %}
{% endif %}

Hope to get some help, thank you!

1

1 Answers

0
votes

Your related collection assignment looks a little bit complicated but should do the trick.

The issue comes with the second part. Once your collection is defined. This kind of code should work:

{% if col %}
    <!-- First, memorize your current product handle -->
    {% assign current_product_handle = product.handle %}
    <!-- Then open the loop to get products inside related collection -->
    {% for product in col.products %}
      <!-- Filter your results to avoid identic product and out of stock products -->
      {% unless product.handle == current_product_handle %}
        {% if product.available %}
          {{ product.title }} and other things you might want to display about related products.
        {% endif %}
      {% endunless %}
    {% endfor %}
{% endif %}