Shopify 知识库 · 概念
折扣:类型、组合规则与结账展示
说明 Shopify 折扣的类型与方式(折扣码与自动折扣;金额、买 X 得 Y、免运费)、资格与门槛、组合规则与上限、起止时区、折扣与 compare-at 价格的区别、结账提示语、分享链接,以及 Liquid 与 API 中读取折扣的入口。
Shopify 折扣是在购物车与结账中对订单价格执行的减免规则,可以由顾客输入折扣码触发,也可以在满足条件时自动应用。它解决「按规则减价并让结账实际执行」;它不等于商品页上的划线价(那是 compare-at price),也不负责活动页的文案与倒计时。官方总览写明折扣作用于订单小计,税费在折扣之后计算。折扣总览。
本库哪些内容依赖它
本文是该平台机制的权威来源,其他文章只写各自页面语境下的用法:
- 内容类型:促销与折扣(活动条件与页面承诺)、会员与积分奖励(长期权益与单次折扣的叠加)。
- 模块与展现:促销兑现、购物车摘要、Countdown Timer(截止时刻须与折扣配置同源)、Badge。
- 页面与验证:活动落地页、活动集合页、购物车、金额排查、购买旅程;折扣链接在模板中的位置见模板。
- 订阅类购买与折扣的关系见销售计划。
核心对象与概念
| 对象 | 含义 | 备注 |
|---|---|---|
| 折扣方式:折扣码 | 顾客在结账输入代码,或在 POS 输入 | 也可用于弃购恢复邮件 |
| 折扣方式:自动折扣 | 满足条件时在购物车与结账自动应用 | 折扣需要顾客把符合条件的商品都加入购物车 |
| Amount off products / orders | 金额或百分比减免,可作用于指定商品、集合或整单 | 全部商品适用时按比例分摊到各商品行 |
| Buy X get Y | 顾客买的商品(Customer buys)与得到的商品(Customer gets) | 得到的商品可为百分比折扣、每件减额或免费;赠品不会自动加入购物车 |
| Free shipping | 免运费,可限定国家或地区,可排除运费高于某金额的费率 | 折扣码与自动折扣两种方式都有 |
| 折扣类别(class) | 商品折扣、订单折扣、运费折扣 | 组合规则按类别判定 |
| 自定义折扣 | Shopify Plus 才能创建的自定义折扣应用;分层或多逻辑折扣也可用第三方应用或 Checkout Blocks | 官方折扣类型页与总览页 |
| 销售价格(compare-at) | 在商品上设置 Compare at 与 Price 形成的促销价 | 不属于折扣功能,见下文 |
| Rollouts | 可独立地激活或停用折扣 | 折扣 FAQ 提及,细节未读 |
在哪里配置
- 入口:Shopify admin 的 Discounts 页面;创建为 Discounts > Create discount,再选类型(Amount off products、Amount off order、Buy X get Y、Free shipping)与方式。
- 起止:开始日期与可选的结束日期,时间按后台所选时区计算;不设结束日期则一直有效。
- 资格:所有顾客、指定顾客、顾客分群(segments)或指定市场(markets);分群上限自动折扣 5 个、折扣码 100 个。
- 门槛:最低购买金额(只计商品价格,不含运费和税费)或最低件数;礼品卡默认不计入。
- 使用限制:总使用次数;Limit to one per customer(按邮箱或手机号追踪);Buy X get Y 可设每单最多使用次数。
- 购买类型:店铺设置了订阅时,可选 One-time purchase、Subscription 或 Both。
- 组合:在每个折扣里手动选择可与哪些类别组合。
- 管理:折扣可 Duplicate、Deactivate、Delete,并可按状态、方式、类型、Combines with、开始日期、使用次数、资格、标签等筛选;有时间线并可留内部备注。
- 分享链接:Discounts > 选中折扣 > Promote > Get a shareable discount code,选择落地页并复制链接或下载二维码。
与主题、Liquid 和 API 的连接
- 分享链接格式:
/discount/{code},可加?redirect=/collections/...指定落地路径;官方建议折扣码名称避免特殊字符,以免影响结账 URL。 - Liquid
cart:cart_level_discount_applications(购物车级折扣)、total_discount(省下的总额,最小货币单位)、items_subtotal_price(行级折扣之后、购物车级折扣与运费之前)、original_total_price(折扣之前)。 discount_application:title(顾客可见名称)、type(automatic、discount_code、manual、script)、value与value_type(fixed_amount、percentage)、target_selection(all、entitled、explicit)、target_type(line_item、shipping_line)、total_allocated_amount。discount_allocation:amount(按顾客本地币种,最小货币单位)与discount_application;无小数位货币(如 JPY、KRW)会追加小数位,需用 money 过滤器输出。- Ajax Cart:
POST /{locale}/cart/update.js的discount参数可传单个或逗号分隔的多个代码,传空字符串清除;返回total_discount、original_total_price、行级discounts与line_level_discount_allocations、cart_level_discount_applications。官方页提示价格差异(常来自自动折扣)可能使同一变体拆成多个行项目。 - Storefront API:
cartDiscountCodesUpdate的discountCodes不区分大小写,最多 250 个,会整体替换现有代码,传空数组清除;写入后必须检查购物车discountCodes中每个代码是否真的适用。 - Admin API:
discountNodes返回折扣,需要read_discounts权限;类型含 DiscountCodeBasic、DiscountCodeBxgy、DiscountCodeFreeShipping、DiscountAutomaticBasic、DiscountAutomaticBxgy、DiscountAutomaticApp 与 Functions 创建的应用折扣。 - Shopify Functions:折扣 Functions 可实现原生不提供的折扣(如阶梯量价),可作用于商品、订单、运费三类;创建需要
write_discounts权限。
限制、数值与易错点
核验于 2026-09-29。官方页面之间的差异并列,不选边。
| 项目 | 官方所写 | 来源 |
|---|---|---|
| 自动折扣数量 | 最多同时 25 个有效,含应用提供的 | 自动折扣页;折扣组合页 |
| 折扣码组合 | 每单最多 5 个商品或订单折扣码,外加 1 个运费折扣码 | 折扣组合页 |
| 可组合类别 | 商品加商品(不同商品)、商品加订单、商品加运费、订单加订单、订单加运费可组合;运费加运费不可;同一商品上的两个商品折扣仅限 Shopify Plus | 折扣组合页 |
| 应用顺序 | 先商品折扣,再订单折扣(基于商品折扣后的小计),最后运费折扣 | 折扣组合页 |
| 多个百分比订单折扣 | 各百分比都基于原始小计计算(示例:10% 加 20% 为 30%) | 折扣组合页 |
| 不兼容时 | 系统应用让顾客省得更多的折扣或组合 | 折扣组合页 |
| 组合设置 | 需要在每个折扣里手动启用,不会自动组合 | 折扣组合页 |
| 折扣码总量 | 每店累计最多 20,000,000 个唯一折扣码;单个折扣码最多适用于 100 个指定顾客、商品和变体 | 折扣码页 |
| 结账后页面 | 后台创建的自动折扣不适用于 post-purchase 页面;Buy X get Y 也不适用于结账后商品优惠 | 自动折扣页;Buy X get Y 页 |
| POS | Buy X get Y 页写明自动折扣在零售场景需要 POS Pro | Buy X get Y 页 |
| 与 Scripts | 自动折扣在 Scripts 之后执行,基于 Scripts 折扣后的价格计算 | 自动折扣页 |
| 时区 | 起止时间与到期按后台显示的时区 | Amount off 页;折扣 FAQ |
- 折扣 ≠ compare-at:折扣是在购物车和结账应用的价格减免;compare-at 是商品价格字段(Price 与 Compare at,且 Compare at 须高于 Price 才显示)。销售价格页写明是否与在哪显示取决于主题;折扣 FAQ 与销售价格页都写明,在商品页显示折扣后的划线价需要第三方应用或自定义开发。销售价格页同时写明,自动折扣和折扣码在结账中以划线价显示。两页表述的场景不同(店面页与结账),并列。集合页在各变体 compare-at 不一致(有空值、0.00 或不同值)时可能不显示促销状态。
- 国际市场:销售价格页写明固定价格会覆盖标准定价,市场级固定促销价需通过 CSV 导入。折扣在 Markets 与多币种下的取整、换算未核验。
- 折扣码输入框可能不出现:没有有效折扣码、草稿订单结账、Shop Pay 用户未登录或有冲突的第三方应用时。
- 结账提示语(折扣 FAQ):无效或未激活 Enter a valid discount code;不适用于购物车商品;不可组合 Some discount codes couldn't be used together. We applied the best combination;已用完 The discount code has already been used;组合页另写 Discount couldn't be used with your existing discounts。两页的不可组合提示语措辞不同,未核实各自出现的场景。
- 其他:新顾客在完成首单前不满足针对特定顾客分群的折扣;礼品卡(作为付款)不计入最低购买金额;按指定商品的折扣码对该商品所有数量生效,可限制每单一次。
验证一次
- 建立一个折扣码和一个自动折扣,固定同一购物车(商品、数量、市场、币种),记录小计、折扣项、运费、税费与总额。
- 逐个测试:有效码、无效码、重复码、条件不足、移除后恢复。
- 组合测试:商品加订单、订单加订单、订单加运费,各自启用与不启用组合,对比顺序与金额;再试超过一个运费码。
- 换到另一个市场与币种,确认资格、金额与提示语。
- 分享链接:打开
/discount/{code}?redirect=…,确认落地页与折扣是否已应用到购物车。 - 在 Liquid 与 Ajax 返回里对照
total_discount、original_total_price与结账页金额。 - 到期与时区:在结束时刻前后各走一次结账,确认与后台显示时区一致。
待继续完善
- POS、销售渠道差异,以及折扣在 Markets 与多币种下的换算未核验。
- Amount off、Buy X get Y、Free shipping 页面中未逐字段核对的选项(如最高折扣值、每单限次的边界)未核验。
- Rollouts 的具体配置与限制未读。
- 各地区对促销、划线价与限时促销的广告规则需要合规确认。
- 未在真实店铺验证提示语出现的场景。