能否基于Shopify调用snippet的模板类型,用Liquid条件隐藏礼品卡库存行
实现方案
完全不需要新建独立snippet,依托Shopify原生Liquid能力即可在现有snippet内直接实现礼品卡场景的库存区块隐藏,无额外资源开销、复用性不受影响。
核心实现逻辑
Shopify为产品对象内置了product.is_gift_card布尔属性,只要当前渲染上下文存在product对象即可直接读取——你现有代码已经直接使用product.available做库存判断,说明无论该snippet经过多少层模板嵌套传递,product对象的上下文都是天然存在的,不需要修改上层文件的参数传递链路。
只需要在原有的库存行显示判断条件里,增加“排除礼品卡产品”的判断逻辑,即可让礼品卡场景下服务端直接不渲染库存状态区块,比前端JS隐藏更稳定。
调整后的完整snippet代码
将原有product-page-1-description.liquid中判断库存行显示的条件从:{%- if item.show_quantity -%}
修改为增加排除条件的版本:{%- if item.show_quantity and product.is_gift_card == false -%}
调整后完整代码如下:
{%- if item.show_product_main_info -%} <div class="tt-add-info"> <ul> {%- if item.show_quantity and product.is_gift_card == false -%} <li class="availability"> <span>{{ 'products.product.availability' | t }}</span> {% if product.available %} <span class="stock_quantity hide"></span> <span class="in_stock hide">{{ 'products.product.in_stock' | t }}</span> <span class="many_in_stock hide">{{ 'products.product.many_in_stock' | t }}</span> <span class="sold_out hide">{{ "products.product.sold_out" | t }}</span> <span class="continue_out hide">{{ "products.product.purchase_when_out_of_stock" | t }}</span> {% else %} <span class="sold_out">{{ "products.product.sold_out" | t }}</span> {% endif %} </li> {%- endif -%} </ul> </div> {%- endif -%}
注意事项
- 该判断逻辑由服务端直接控制输出,不会出现前端加载时库存区块先显示再被隐藏的闪烁问题,稳定性远高于前端JS隐藏方案。
- 不要通过判断当前模板文件名/模板类型做筛选,不同商家给礼品卡配置的自定义模板命名没有统一规范,容易出现漏判;
product.is_gift_card是Shopify平台层面对产品类型的原生标记,无论礼品卡使用什么模板、走哪条snippet调用链路,判断都会稳定生效。 - 后续如果有其他特殊产品类型需要隐藏库存行,直接在现有判断条件后追加
and逻辑即可,不需要拆分多个独立snippet,完全满足复用性要求。
内容的提问来源于stack exchange,提问作者Boucherie
相关产品推荐
相关产品推荐

