Shopify产品页collection对象为空,面包屑功能实现遇阻求助
解决Shopify产品页面面包屑导航中collection对象为空的问题
问题原因
产品页面的collection对象仅在用户从集合页面跳转进入产品页时才会被赋值。如果用户直接访问产品URL、通过搜索或其他入口进入,这个对象就会返回undefined。另外,当产品属于多个条件集合时,默认的collection无法自动关联到合适的集合。
解决方案
通过product.collections获取产品所属的所有集合,再根据需求选择展示的集合(比如优先手动集合、第一个集合,或指定特定handle的集合)。
方案1:显示产品所属的第一个集合
修改产品页面的面包屑代码:
{%- when 'product' -%} {%- assign product_collection = product.collections | first -%} {%- if product_collection -%} <li class="breadcrumbs__item"> {{ product_collection.title | link_to: product_collection.url }} </li> {%- endif -%} <li class="breadcrumbs__item"> <a class="breadcrumbs__link" href="{{ product.url }}" aria-current="page">{{ product.title }}</a> </li>
方案2:优先选择手动创建的集合(排除条件集合)
如果需要优先展示手动集合(避免条件集合的重复或无关展示),可通过集合属性过滤:
{%- when 'product' -%} {%- assign manual_collections = product.collections | where: 'rules', blank -%} {%- assign product_collection = manual_collections | first | default: product.collections | first -%} {%- if product_collection -%} <li class="breadcrumbs__item"> {{ product_collection.title | link_to: product_collection.url }} </li> {%- endif -%} <li class="breadcrumbs__item"> <a class="breadcrumbs__link" href="{{ product.url }}" aria-current="page">{{ product.title }}</a> </li>
说明:手动集合的
rules属性为空,条件集合则包含规则,通过这个特性可区分两者。
方案3:指定优先展示的特定集合
如果有需要优先展示的核心分类集合,可通过handle筛选:
{%- when 'product' -%} {%- assign priority_collection = product.collections | where: 'handle', 'your-priority-collection-handle' | first -%} {%- assign product_collection = priority_collection | default: product.collections | first -%} {%- if product_collection -%} <li class="breadcrumbs__item"> {{ product_collection.title | link_to: product_collection.url }} </li> {%- endif -%} <li class="breadcrumbs__item"> <a class="breadcrumbs__link" href="{{ product.url }}" aria-current="page">{{ product.title }}</a> </li>
将your-priority-collection-handle替换为目标集合的handle即可。
额外提示
- 如果产品不属于任何集合,代码会自动跳过集合面包屑,仅显示产品本身,避免空内容或错误。
- 测试时可直接访问产品URL,验证面包屑是否正常显示对应集合。
内容的提问来源于stack exchange,提问作者Jakub Juřena
相关产品推荐
相关产品推荐

