You need to enable JavaScript to run this app. Shopify检查商品是否存在于购物车 解决推荐商品重复展示问题
优惠活动
大模型
产品
解决方案
定价
更多

Shopify检查商品是否存在于购物车 解决推荐商品重复展示问题

Shopify 购物车推荐商品去重实现

原代码的核心逻辑bug

  • 没有给product_show设置默认初始值,变量未定义会导致判断失效
  • 条件判断逻辑写反:原代码中只要碰到任意一个购物车商品和当前推荐商品handle不相等,就会把商品标记为不展示,完全没有正确识别「当前推荐商品是否真的在购物车中」
  • 判断完成后没有加渲染拦截条件,哪怕标记为不展示,商品HTML依然会正常输出到页面上

正确的判断流程

每遍历一个推荐池里的商品时,按照以下顺序处理:

  1. 先把当前商品的展示状态默认设为「可展示」
  2. 遍历购物车的所有条目,只要发现购物车里存在和当前推荐商品handle一致的条目,就立刻把商品标记为「不展示」,同时用{% break %}提前跳出内层循环,减少不必要的遍历
  3. 只有商品的展示状态为「可展示」时,才输出对应的商品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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 06:06:04