Shopify检查商品是否存在于购物车 解决推荐商品重复展示问题
Shopify 购物车推荐商品去重实现
原代码的核心逻辑bug
- 没有给
product_show设置默认初始值,变量未定义会导致判断失效 - 条件判断逻辑写反:原代码中只要碰到任意一个购物车商品和当前推荐商品handle不相等,就会把商品标记为不展示,完全没有正确识别「当前推荐商品是否真的在购物车中」
- 判断完成后没有加渲染拦截条件,哪怕标记为不展示,商品HTML依然会正常输出到页面上
正确的判断流程
每遍历一个推荐池里的商品时,按照以下顺序处理:
- 先把当前商品的展示状态默认设为「可展示」
- 遍历购物车的所有条目,只要发现购物车里存在和当前推荐商品handle一致的条目,就立刻把商品标记为「不展示」,同时用
{% break %}提前跳出内层循环,减少不必要的遍历 - 只有商品的展示状态为「可展示」时,才输出对应的商品HTML内容
修正后的可直接使用代码
{%- if cart.item_count > 0 -%} {%- assign product_image_size = '800x1026' -%} {%- for product in collections[settings.product_upsell_collection].products limit:settings.product_upsell_limit -%} {%- assign product_show = 'yes' -%} {%- for item in cart.items -%} {%- if item.product.handle == product.handle -%} {%- assign product_show = 'no' -%} {%- break -%} {%- endif -%} {%- endfor -%} {%- if product_show == 'yes' -%} // 这里替换成原代码里的商品HTML渲染部分 {%- endif -%} {%- endfor -%} {%- endif -%}
可选优化点
- 如果需要精确到商品SKU粒度的去重,把判断条件里的
item.product.handle == product.handle替换为item.variant.id == product.selected_or_first_available_variant.id即可 - 如果去重后实际展示的推荐商品数量达不到设置的上限,可以在外层循环里加计数变量,没达到目标数量时就持续遍历推荐池的商品,直到凑够指定数量再停止
内容的提问来源于stack exchange,提问作者Aniket Singh
相关产品推荐
相关产品推荐

