跳转到主要内容

Shopify优惠叠加的工作原理:为什么原生系统仅应用最高折扣,以及如何正确组合折扣

By Stackable TeamPublished on July 15, 2026Discount Strategy#discount-stacking#checkout
Shopify优惠叠加的工作原理:为什么原生系统仅应用最高折扣,以及如何正确组合折扣

Shopify默认仅应用您的单一最高价值折扣。要叠加折扣,您需要存在于不同类别中的折扣,Shopify称之为产品、订单和运费,加上每个折扣上的规则,告诉它是否允许与其他类别组合。同一类别中的两个折扣不会相加:Shopify保留价值较高的那个并丢弃其他的。跨不同类别,组合是允许的,但仅当每个折扣明确选择加入时才行。没有单一的"叠加所有内容"开关,这就是为什么许多商店在购物车页面上显示叠加总金额,然后在结账时收取不同的总金额。

本指南说明了Shopify如何决定什么可以组合、为什么原生折扣仅选择最高额、每行一个产品折扣规则及其Shopify Plus例外、代码和自动折扣如何交互、结账平价陷阱如何让商家亏钱,以及一个分步设置示例,其中包含您今天可以遵循的工作示例。

您可以在Shopify中叠加折扣吗?

可以,但仅限于在类别之间叠加,并仅当您打开组合时才行。来自一个类别的折扣可以与来自不同类别的折扣组合,但来自同一类别的两个折扣永远不会相加。因此,体积折扣(产品类)、支出目标折扣(订单类)和免运费(运费类)都可以应用于同一订单。您原生无法做的是将两个产品折扣、两个订单折扣或两个运费折扣堆叠在一起:当两个同类折扣都可以应用时,Shopify保留价值更高的那个,并以无提示方式忽略其余的。

问题是,组合功能在您打开它之前是关闭的。每个折扣默认单独运行,因此如果您想要您的体积等级和免运费优惠在同一订单上,您必须打开每一个并将其标记为与另一个类别可组合。错过这一步,符合条件的客户只会获得一个。

图像占位符(图1):三个Shopify折扣类别
建议的视觉效果:白色背景上的干净16:9图表,在紫色(产品折扣)、深金(订单折扣)和板岩(运费折扣)中有三个标记的列。列之间的箭头显示不同类别之间的绿色"可以组合"链接和相同类别内的红色"保留较高价值"循环。极简主义、平面、品牌颜色紫色和金色、无衬线标签、无摄影。

Shopify的三种折扣类别是什么?

您在Shopify中创建的每个折扣,无论是自动折扣、折扣代码,还是应用通过Shopify Functions生成的,都被分配一个类别。类别控制折扣的计算方式,更重要的是,它允许与什么组合。

产品折扣

产品折扣降低购物车中特定商品的价格。体积等级("购买3件,节省15%"),购买X获得Y优惠、对集合的百分比折扣,以及对单一产品的固定金额折扣都是产品类折扣。它们附加到个别购物车行,这对下面所述的每行规则很重要。

订单折扣

订单折扣降低订单小计,而不是任何单一产品。支出目标,例如"超过100美元的订单可享受10美元折扣","您的订单可享受20美元折扣"或全店范围的整个购物车百分比折扣都是订单类折扣。由于它们作用于小计,一次只能应用一个。两个订单折扣永远不会在同一订单上组合。

运费折扣

运费折扣减少或消除运费。阈值以上的免运费和运费百分比折扣都是运费类折扣。与订单折扣一样,每个订单仅应用一个运费折扣。

此分类之所以重要,是因为叠加是按类别对决定的,而不是按折扣对决定的。您永远不会问"这两个特定优惠可以组合吗"。您问的是"产品折扣允许与订单折扣并排放置吗,它们中的每一个是否都选择了加入"。根据Shopify帮助中心,折扣仅在设置为可组合并属于符合条件的类别时才组合,这就是为什么默认行为让这么多商家感到惊讶。

为什么Shopify仅应用最高折扣?

这是商家在Shopify社区论坛上提出的首要挫折,这不是一个错误。当同一类别中的两个折扣都可以应用于订单时,Shopify不会将它们相加。它会比较它们,并保留给客户降价幅度更大的那个,然后以无警告和无明细行项目的方式丢弃其他的。

设想一家商店运行自动"购买6件,获得10%折扣"体积折扣(产品类),而客户输入也是产品类的"SAVE15"代码。两个都是产品折扣,所以Shopify不会将它们叠加成25%。它应用15%的代码,因为它的价值更高,而10%的体积折扣以无提示方式消失。商家预期体积折扣总会触发,会看到不一致的结果,这取决于购物车中还有什么。

同样的情况发生在两个订单折扣或两个运费折扣上:最高价值赢,其他所有的都被丢弃。这是Shopify的安全默认设置,防止商店无意中通过将同类折扣堆叠在彼此上面来无意中损失利润。这是合理的,但它是无形的,而无形性是问题所在。商家仅在逐行阅读测试收据时才发现他们的折扣不叠加,或者更糟的是,当客户问他们为什么被收费比购物车显示的要多时。

每行一个产品折扣规则是什么?

这是甚至经验丰富的商家也会忽视的细微差别。产品折扣的"最高价值赢"规则不是应用于整个购物车的。它是按购物车行应用的。

购物车行是购物车中的单一产品和变体行。默认情况下,Shopify允许每个购物车行仅一个产品折扣,因此如果两个产品类折扣针对同一行,该行会保留两者中较好的。但是针对不同行的两个产品折扣可以都应用于同一订单,因为它们不会为了同一行而竞争。

这就是为什么一家商店可以同时运行"帽子打八折"和"购买2件T恤,获得1件免费"的原因:帽子折扣应用于帽子行,T恤优惠应用于T恤行,两者都应用。您在标准计划上无法做的是将两个产品折扣放在同一件T恤行上。

Shopify Plus例外

在同一购物车行上叠加两个产品折扣是可能的,但仅限于Shopify Plus,并且仅使用Shopify称为同行叠加的基于标签的机制。根据Shopify的开发者文档,同行产品-产品叠加使用标签匹配,是Shopify Plus功能。如果您不在Plus上,将"同一商品上的两个产品折扣"视为表外,并设计您的优惠,以便相竞争的产品折扣针对不同的产品。

这值得明确说,因为许多营销文案暗示您可以自由叠加任何两个产品交易。您不能。跨类别叠加(产品加订单加运费)可在每个Shopify计划上进行。同一行上的同类产品叠加不能,除非您在Plus上。

折扣代码和自动折扣如何交互?

代码和自动折扣遵循相同的类别规则,在结账时有一些额外限制。

自动折扣和代码如果在符合条件的类别中且都设置为可组合,则可以组合,就像任何其他配对一样。产品类代码和订单类自动折扣可以叠加。同一行上的一个代码和一个自动的两个产品类折扣不能叠加:最高价值赢。

在结账时,Shopify限制客户可以输入的代码数量最多5个产品或订单折扣代码加1个运费折扣代码。自动折扣不计入该限制,但它们仍然遵循类别组合规则,因此客户仅看到实际允许组合的代码,给定他们的类别和设置。所有冲突都由最高价值规则解决。

实际的结论:代码不是解决叠加规则的捷径。代码只是另一个具有类别的折扣。如果您想要代码与您的自动体积等级组合,两个必须在不同的类别中,并且两个都必须标记为可组合。

为什么折扣在购物车中显示,但在结账时不显示?

这是花费商店真钱的陷阱,也是一般关于折扣应用的最常见的抱怨。在许多应用中,购物车页面和结账是两个计算折扣的不同方式的两个不同系统。

许多折扣应用使用购物车页面或主题小部件上的JavaScript计算叠加总金额。该预览看起来完美。然后客户点击结账,而不运行该主题JavaScript的Shopify结账会用自己的规则重新计算。如果两者不一致,客户会在购物车中看到一个数字,在结账时看到另一个数字。欠收费会让商家损失利润;过度收费会损失销售。加快速度的结账会变得更糟:Shop Pay、Apple Pay和Google Pay完全跳过购物车页面,因此基于主题的折扣逻辑对这些买家永远不会运行,折扣以无提示方式失败。

唯一可靠的修复是在服务器端、Shopify自己的结账管道中计算折扣,以便有一个真实来源。这就是Shopify Functions的用途。基于Shopify Functions构建的折扣运行相同的计算,无论买家是在购物车页面、结账页面还是加快速度的结账中,因为单个引擎做数学。购物车预览和最终费用不能分开,因为它们是相同的计算。

图像占位符(图2):购物车总金额与结账总金额
建议的视觉效果:16:9分面板插图。左面板标记为"主题JavaScript"显示购物车,叠加总金额为92美元和小红色警告。右面板标记为"Shopify结账"显示同一购物车收费110美元,带红色不匹配徽章。中心分隔符带有断链图标。下方,绿色横幅显示"服务器端Functions:一个总金额,无处不在"。品牌颜色紫色和金色、平面矢量样式、无摄影。

工作示例:叠加体积等级、订单折扣和免运费

让我们具体一点。客户创建此购物车:

  • 3个无线耳塞,每个40美元,小计120美元
  • 标准运费通常花费8美元

该商店运行三个优惠:

  1. 体积折扣:购买3个或以上耳塞,获得15%折扣(产品类)
  2. 支出目标:超过100美元的订单享受10美元折扣(订单类)
  3. 超过75美元订单的免运费(运费类)

这三个属于不同的类别,因此如果每个设置为与其他组合,它们就有资格组合。以下是与Shopify默认行为的数学比较。

在正确配置的叠加中,客户支付92美元并获得免运费。使用Shopify开箱即用的默认设置,其中组合关闭,仅应用单一最高价值折扣。那就是18美元的体积折扣,所以客户支付102美元并仍然支付8美元运费,总共110美元。订单折扣和免运费永远不会触发。

110美元和92美元之间的18美元差异是"我打开了叠加"和"我假设Shopify会自动完成"之间的区别。将其乘以BFCM周末,利益是显而易见的。

如何在Shopify中分步设置可叠加的折扣

如果您小心的话,可以用原生Shopify折扣做很多这样的事情。这是可靠的序列。

1. 决定每个优惠的类别

写下每个优惠并将其标记为产品、订单或运费。这立即告诉您哪些优惠可以组合(不同类别)以及哪些会冲突(同一类别)。两个针对同一商品的产品交易在标准计划上永远不会叠加,所以现在计划,而不是在结账时。

2. 保持相竞争的折扣在不同的类别中

如果您想要两件事相加,请确保它们不是同一类别。想要产品百分比折扣加上订单美元金额折扣?好的,这些是产品和订单,它们可以组合。想要同一产品的两个百分比折扣?那是一条线上的两个产品折扣,需要Shopify Plus。重新构造其中一个,例如将第二个转换为订单折扣,使它们存在于不同的类别中。

3. 为每个折扣打开组合

在Shopify管理员中,每个自动折扣和代码都有一个"组合"部分,您可以在其中勾选它可以与哪些其他折扣类型组合。这默认关闭。打开每个应该叠加的优惠,并明确允许它与相关类别组合。如果您甚至在一个优惠上跳过这个,该优惠就会单独运行。

4. 注意每行和每个订单的限制

记住:每个购物车行一个产品折扣,每个订单一个订单折扣,每个订单一个运费折扣,每个商店最多25个活跃自动基于函数的折扣。不要设计需要两个订单折扣叠加的促销活动,因为它不能。

5. 测试应该适用和不应该适用的购物车

创建一个真实测试购物车,符合您所有优惠的条件,进行草稿或测试订单,并逐行阅读结账摘要以确认每个预期的折扣都在那里。然后创建一个应该仅获得其中一些的购物车,并确认其他的正确保持关闭。以无提示方式失败是敌人:永远不会触发的折扣也永远不会出错。

6. 验证加快速度的结账

通过Shop Pay运行相同的测试购物车。原生或基于Functions的折扣以相同方式应用;依赖于主题脚本的折扣是您在客户看到之前捕捉购物车与结账不匹配的地方。

图像占位符(图3):优惠上的三个组合开关
建议的视觉效果:16:9产品屏幕截图mockup,Stackable活动编辑器堆叠步骤。显示一个带有三个标记切换开关的优惠,"与产品折扣组合","与订单折扣组合"和"与运费折扣组合",两个打开,一个关闭,下方带有纯英文摘要行,显示"此优惠与订单和运费折扣堆叠"。干净的Shopify Polaris管理员样式,品牌重点紫色。参考docs/screenshot-manifest.md插槽discount-stacking-step-1以便稍后捕捉真实屏幕。

使用Stackable可靠地运行

如果您不想手动审核数十个优惠中的可组合复选框并测试订单每个排列,这正是问题Stackable被构建来解决的,它在Shopify的真实规则中诚实地做到了。

  • 每个优惠都有三个组合开关,一个用于产品、订单和运费折扣。它们一一映射到Shopify如何决定组合,所以您设置的就是结账做的。没有隐藏的默认值要用测试订单发现。
  • 购物车模拟器在您上线之前通过每个活跃优惠运行样本购物车,显示确切的逐行总金额,加上哪些优惠被触发,哪些没有以及为什么。
  • 数学在aShopify Function中运行,所以购物车页面、结账页面和加快速度的结账(如Shop Pay)都从一个引擎计算相同的总金额。没有主题与结账漂移要追踪。
  • Stackable永远不会改变您的产品价格。折扣仅存在为结账调整,因此卸载会将您的目录保持在完全相同的状态。

免费安装 Stackable,看购物车、结账和 Shop Pay 的金额分毫不差。usestackable.com/pricing 🚀

底线

  • Shopify默认仅应用您的单一最高价值折扣。叠加不是自动的;它是您按优惠打开的设置。
  • 有三种折扣类别:产品、订单和运费。折扣跨类别组合,从不在同一类别中,最高价值赢。
  • 产品折扣遵循每个购物车行一个的规则。两个产品折扣在Shopify Plus上的同一商品上叠加,使用基于标签的同行叠加。
  • 折扣代码遵守相同的类别规则,每个订单的结账上限为5个产品或订单代码加1个运费代码。
  • 购物车与结账不匹配发生在折扣在主题中而不是服务器端计算时。Shopify Functions在任何地方(包括Shop Pay)保持一个总金额。
  • 始终测试应该获得每个折扣的购物车和不应该获得的购物车,并逐行阅读结账摘要。以无提示方式失败永远不会抛出错误。
  • Stackable等工具直接暴露三个每类组合开关,并在您上线前预览确切的总金额,因此您配置的就是结账收费的。

相关文章

常见问题

查找常见问题的答案

  • 可以,但仅限于在三种折扣类别(产品、订单和运费)中叠加,并且仅当每个折扣都设置为组合时才行。体积折扣、订单折扣和免运费都可以应用于一个订单。同一类别中的两个折扣不会叠加:Shopify保留价值较高的折扣并丢弃其他的。组合功能默认关闭,因此您必须为每个应该叠加的优惠打开它。

  • 当同一类别中的两个折扣都可以应用时,Shopify不会将它们相加。它会比较它们,并保留降价幅度更大的那个,然后以无提示方式丢弃其他的。这是一个有意的安全默认设置,防止商店通过在一个订单上堆叠同类折扣来无意中损失利润。解决方案是将相竞争的优惠放在不同的类别中,并将每个优惠标记为可组合。

  • 在标准Shopify计划中,不能在同一购物车行上叠加。每条产品行仅应用一个产品折扣,因此同一商品上的两个百分比产品折扣会产生较高的那个。以不同商品为目标的两个产品折扣可以都应用。Shopify Plus功能中存在同行产品-产品叠加,它使用标签匹配。

  • 如果折扣是原生的或基于Shopify Functions构建的,则可以。因为数学计算在服务器端运行,并在每条结账路径中以相同方式应用。如果您的折扣依赖于主题JavaScript,加快速度的结账通常会跳过该代码,折扣会无提示地失败。始终通过Shop Pay测试实际购物车以确认。

  • Shopify的结账页面每个订单接受最多5个产品或订单折扣代码加1个运费折扣代码。代码仍然遵循类别组合规则,因此输入多个代码不会覆盖最高价值逻辑。同一类别中的代码不会叠加;仅符合条件且可组合的不同类别代码才会应用。

  • 最可能的原因是您的购物车总金额由主题JavaScript计算,而结账由Shopify自己的规则重新计算,两者不一致。加快速度的结账会完全跳过购物车页面,因此基于主题的折扣对这些买家永远不会运行。使用Shopify Functions在服务器端计算折扣会消除不匹配,因为一个引擎会计算每个总金额。

  • 类别是Shopify分配给每个折扣的类别:产品、订单或运费。产品折扣可减少特定商品,订单折扣可减少订单小计,运费折扣可减少运费。类别控制折扣可以与什么组合。叠加是按类别对决定的,而不是按单个优惠对决定的。

  • 可以,如果它们在符合条件的类别中,且都设置为可组合。例如,自动订单折扣可以与产品类代码组合。但是同一行上的自动产品折扣和产品类代码不会叠加;较高价值的那个会赢。在两个折扣上打开组合设置。

  • 保持组合设置关闭,这是默认值。在原生Shopify中,不要在"组合"部分中选中其他折扣类型。在Stackable中,保持三个组合开关关闭,以便优惠单独运行。如果您想要两个同类优惠永远不都应用,那是自动的,因为同类折扣无论如何都不会叠加。

  • 有。Shopify允许每个商店最多25个活跃的自动基于函数的折扣。在结账时,每个购物车行应用一个产品折扣,每个订单应用一个订单折扣,每个订单应用一个运费折扣。在这些限制范围内计划促销活动,因为需要两个订单折扣叠加的设计无法实现。

  • 不一定。原生Shopify折扣允许您无需代码即可设置组合,基于Shopify Functions构建的应用会为您处理类别规则。仅当您从头开始编写自定义Shopify Functions时,才需要开发者。使用原生折扣或基于Functions的应用,设置就是复选框和测试,而不是代码。

  • 只要数学计算在服务器端,使购物车和结账相一致,叠加本身不会。问题来自改变产品价格或将折扣文本呈现为标题标签的应用。寻找一个仅将折扣作为结账调整计算的解决方案,永远不重写目录价格,并呈现店面小部件而不注入额外H1标签的解决方案。

Do this in your store

  • Discount Stacking

    Shopify applies only the highest discount by default. Stack volume tiers, order discounts and free shipping, with cart and checkout always agreeing.

  • Volume Discounts

    Set volume discounts that count one product's variants, not your whole collection. Shopify tiered pricing that holds up from cart to checkout.

Stackable Team

The team building Stackable, the reliability-first bulk and volume discount app for Shopify. We write about discount stacking, Shopify Functions, and how to run promotions that hold up at checkout.

我们使用必要 Cookie 来运行本网站,并仅在获得你许可的情况下,使用分析 Cookie 来了解访问情况。详见我们的 Cookie 政策.