从所有收集页面液体中排除带有标签的产品

Exclude product with tag from all collection page liquid

我对 Shopify 还是很陌生,所以我对它的了解非常有限。

我创建了一个页面,我想在其中显示带有“出口”标签的某些产品。这些产品永远不应出现在产品系列页面上 (siteurl/collection/all)。

我尝试从集合模板中排除带有标签的产品,但这只会在排除的页面上留下空白。

这是我当前的代码:

{% for product in collection.products %}
    {% if product.tags contains 'export' %}{% continue %}{% endif %}
       My code for displaying the product
{% endfor %}

我也试过:

{% for product in collection.products %}
    {% unless product.tags contains 'export' %}
       My code for displaying the product
    {% endunless %}
{% endfor %}

我的想法是,我需要在调用我的产品之前设置条件,这样我的分页就不会中断。有没有办法在 Shopify 中执行此操作?

您需要知道的是,Liquid 在执行下一个操作之前执行初始操作 (for product in collection.products)。

因此 forloop 获取所有产品,然后您的 if 语句删除这些产品。不幸的是,分页已经在 forloop 期间执行了产品拆分,因此当您删除产品时,它会将其从分页结果中删除。

恼人的是,没有办法解决这个问题。 唯一现实的解决方案是创建您自己的 all 系列,然后使用智能过滤器添加除标记为 xyz.

的产品之外的所有内容

此代码应该适合您,它是基本的并且包含一些可以排除但会帮助您了解其工作原理的代码

您的 COLLECTION 模板的代码:

{% for product in collection.products %}
    <!-- Set the default value of "product_show" to "true" -->
    {% assign product_show = true %}

    <!-- We iterate all the tags inside the product checking if one of them EXACTLY matches with "Export" -->
    {% for tag in product.tags %}

        {% if tag == "export" %}
            <!-- If we find an "export" tag then we set product_show to "false" -->
            {% assign product_show = false %}

            <!-- When we find the label we exit the "FOR" loop -->
            {% break %}
        {% endif %}
    {% endfor %}

    <!-- If the product has "product_show" then it will not be shown and will continue with the next product -->
    {% if product_show == "true" %}
        CODIGO DEL PRODUCTO
    {% endif %}
{% endfor %}