EN
Shopify 知识库 · 概念

折扣:类型、组合规则与结账展示

说明 Shopify 折扣的类型与方式(折扣码与自动折扣;金额、买 X 得 Y、免运费)、资格与门槛、组合规则与上限、起止时区、折扣与 compare-at 价格的区别、结账提示语、分享链接,以及 Liquid 与 API 中读取折扣的入口。

Shopify 折扣是在购物车与结账中对订单价格执行的减免规则,可以由顾客输入折扣码触发,也可以在满足条件时自动应用。它解决「按规则减价并让结账实际执行」;它不等于商品页上的划线价(那是 compare-at price),也不负责活动页的文案与倒计时。官方总览写明折扣作用于订单小计,税费在折扣之后计算。折扣总览。

本库哪些内容依赖它

本文是该平台机制的权威来源,其他文章只写各自页面语境下的用法:

核心对象与概念

对象含义备注
折扣方式:折扣码顾客在结账输入代码,或在 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 页
POSBuy X get Y 页写明自动折扣在零售场景需要 POS ProBuy 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。两页的不可组合提示语措辞不同,未核实各自出现的场景。
  • 其他:新顾客在完成首单前不满足针对特定顾客分群的折扣;礼品卡(作为付款)不计入最低购买金额;按指定商品的折扣码对该商品所有数量生效,可限制每单一次。

验证一次

  1. 建立一个折扣码和一个自动折扣,固定同一购物车(商品、数量、市场、币种),记录小计、折扣项、运费、税费与总额。
  2. 逐个测试:有效码、无效码、重复码、条件不足、移除后恢复。
  3. 组合测试:商品加订单、订单加订单、订单加运费,各自启用与不启用组合,对比顺序与金额;再试超过一个运费码。
  4. 换到另一个市场与币种,确认资格、金额与提示语。
  5. 分享链接:打开 /discount/{code}?redirect=…,确认落地页与折扣是否已应用到购物车。
  6. 在 Liquid 与 Ajax 返回里对照 total_discount、original_total_price 与结账页金额。
  7. 到期与时区:在结束时刻前后各走一次结账,确认与后台显示时区一致。

待继续完善

  • POS、销售渠道差异,以及折扣在 Markets 与多币种下的换算未核验。
  • Amount off、Buy X get Y、Free shipping 页面中未逐字段核对的选项(如最高折扣值、每单限次的边界)未核验。
  • Rollouts 的具体配置与限制未读。
  • 各地区对促销、划线价与限时促销的广告规则需要合规确认。
  • 未在真实店铺验证提示语出现的场景。