Shopify Liquid:分页页面中collection.all_products数组返回空值
解决Shopify集合页面加载全部商品时
collection.all_products为空的问题 嘿,我之前在Shopify主题开发里碰到过一模一样的坑,让我帮你拆解一下问题出在哪,以及怎么修复!
问题根源
你想用{% paginate collection.all_products by collection.all_products_count %}绕过默认50个商品限制的思路是对的,但这里藏着一个Liquid渲染顺序的坑:当你直接在paginate标签里使用collection.all_products_count时,Liquid在解析分页逻辑的阶段,还没正确初始化collection.all_products的完整集合,导致分页规则失效,最终返回空数组。
另外要注意:Shopify的paginate标签中,by参数的最大值是100,如果你的集合商品数超过100,这个方法只能加载前100个,但先解决当前空数组的问题再说。
修复方案
我们可以先把总商品数提前赋值给一个独立变量,再用这个变量设置分页数量,就能避开上下文解析的问题:
{% assign total_collection_products = collection.all_products_count %} {% paginate collection.all_products by total_collection_products %} {% if collection.all_products.size > 0 %} {% for product in collection.all_products %} <!-- 这里写你的商品渲染代码,比如产品卡片、标题、价格等 --> <div class="product-item"> <h3>{{ product.title }}</h3> <p>{{ product.price | money }}</p> </div> {% endfor %} {% else %} <p>这个集合还没有商品哦</p> {% endif %} {% endpaginate %}
额外排查点
如果按上面的写法还是空数组,你可以先在页面上输出{{ collection.all_products_count }}看看数值:
- 如果输出是0,那说明你的集合本身确实没有商品,需要检查集合的商品关联设置;
- 如果输出大于0但数组还是空,那可能是你的主题里有其他逻辑(比如隐藏缺货商品的筛选器)影响了
collection.all_products的返回结果,可以暂时移除其他筛选代码测试。
内容的提问来源于stack exchange,提问作者Simon.Hermit
相关产品推荐
相关产品推荐

