跳转到主要内容
故障排除

购物车抽屉将赠品或组合商品显示为原价

如果购物车抽屉将赠品或组合商品显示为原价,但购物车总额和结账页面金额正确,请检查购物车抽屉读取和刷新价格的方式。较旧的 Liquid 价格字段可能不会包含自动折扣,购物车抽屉也可能保留过时的购物车快照。本文将说明如何区分这两种情况。

快速检查:总额是否正确?

在进行任何修改前,请确认错误价格实际出现的位置:

  • 如果购物车抽屉中的单行价格看起来不正确(赠品或折扣商品显示为原价),但购物车抽屉底部的购物车小计和结账页面总额正确,这只是显示问题。请继续阅读。
  • 如果结账页面总额本身不正确,那就是另一个问题(例如其他折扣应用叠加,或折扣不匹配)。本文不涵盖这种情况。

Bundlex 不会渲染你的购物车抽屉。折扣由 Shopify 购物车折扣函数在结账时应用,Bundlex 无法重写主题中的单行价格显示。

为什么购物车抽屉显示原价

Bundlex 通过 Shopify 购物车折扣函数应用折扣。该函数会将折扣分配到购物车商品行,Shopify 将其视为一种自动折扣。

问题在于某些主题渲染购物车商品行的方式。较旧或自定义的购物车抽屉会使用 Liquid 字段 line_item.price 和 line_item.line_price 显示商品行价格。Shopify 官方文档将这些字段标记为已弃用,因为 它们不会反映自动折扣。因此,即使 Shopify 已正确记录该商品行的折扣,购物车抽屉仍会显示原始的未折扣价格。

买家看到的结果是:组合中的每个商品行都显示相同的原价单价,免费商品行看起来甚至像是被收费。同时,小计和结账页面金额是正确的,因为它们根据折扣后的数值计算。

使用 /cart.js 进行确认

无论购物车抽屉显示什么,你都可以证明折扣已正确应用:

  1. 在店面中,将组合(或包含免费赠品的优惠)添加到购物车。
  2. 在浏览器中,在同一商店打开 /cart.js(例如,访问 https://yourstore.com/cart.js)。
  3. 找到受影响的商品行,然后查看 final_price 和 final_line_price。

对于正常工作的免费赠品行,你会看到类似 final_price: 0 和 final_line_price: 0 的内容,折扣会列在该商品行的 discounts 下方(包括优惠标题和折后金额)。请检查购物车抽屉实际渲染了哪些字段。上述弃用说明适用于 Liquid 的 line_item.price 和 line_item.line_price;仅凭 /cart.js 响应无法确定购物车抽屉的数据来源。

结果解读:

  • final_price / final_line_price反映了折扣,但购物车抽屉显示原价。请同时检查购物车抽屉渲染的字段,以及购物车发生变化后是否会刷新。
  • final_price没有反映折扣。此时问题并非购物车抽屉显示问题。请改为检查购物车函数一侧,例如组合是否正确添加标签、折扣元字段是否为最新,或 B2B、客户标签等客户适用条件是否生效。

解决方法:使用 final_price 和 final_line_price

如果购物车抽屉的 Liquid 代码片段使用这些已弃用字段显示当前价格,请将其替换为对应的 final_ 字段:

  • line_item.price 改为 line_item.final_price
  • line_item.line_price 改为 line_item.final_line_price

final_字段包含行级折扣。如果您的购物车抽屉使用 JavaScript,还请确认更改后它会渲染最新的购物车响应或更新后的主题区块。替换价格字段无法修复过时的快照。

由于每行的 price值是静态 Liquid 属性,Bundlex 无法替您重写。折扣数据已经存在于 final_price中,主题只需读取这些数据即可。

如果您使用原生的比较价

如果您的变体还带有 Shopify compare_at_price(例如“优惠 50%”这样的划线标记),该标记由主题根据变体数据渲染,与 Bundlex 折扣无关。切换到 final_字段后,商品行价格会反映 Bundlex 折扣,而比较价划线仍会按照您的主题配置显示。

另一种情况:价格为 $0 的赠品行残留在购物车中

还有一种相关但不同的情况:客户选择了包含免费赠品的优惠,随后将主商品数量减少到优惠门槛以下。主商品行会正确降至较低档位,但免费赠品行仍留在购物车中,并显示 $0。

原因如下。当数量低于门槛时,购物车函数会正确停止应用折扣并移除折扣分配。但 Shopify 购物车函数 无法移除购物车行(因为它没有可用的移除操作)。对于配置为 $0 目录变体的免费赠品,没有可以“恢复到”的价格,因此不再符合条件的赠品行会以 $0 继续留在购物车中。

为处理这种情况,Bundlex 提供了一个组件端清理功能,会在购物车发生更改后运行并移除孤立的赠品行。该功能只能在以下条件下运行:

  • 仅限免费赠品。付费附加商品由组合完整性机制处理,而不是由此清理功能处理。
  • 支持的购物车更改路径。当完整的 Bundlex 组件处于活动状态时,清理功能会处理 fetch 和 XHR 购物车更改。如果页面仅运行赠品清理脚本而没有组件,则拦截仅覆盖 fetch 更改。主题刷新行为仍可能影响购物车抽屉的显示内容。
  • 清理功能会尽力执行。如果某个步骤失败,赠品行可能会继续显示,直到下一次购物车交互。

移除商品行后,Bundlex 会分发购物车刷新事件,提示主题重新渲染。在 Dawn 以及基于 Dawn 构建的 Shopify 免费主题中,Bundlex 还会重新绘制购物车抽屉、购物车页面和购物车图标上的数量。Shopify 没有一个所有主题都会实现的统一购物车更新事件,因此在其他未监听这些事件的主题中,购物车抽屉可能会保持过时状态,直到下一次交互。最重要的是:购物车计算始终正确。客户不会因残留的 $0 行而被收费,无论购物车抽屉暂时显示什么内容,结账总额都准确无误。

总结

  • 购物车抽屉显示原价,但总额和结账金额正确?请检查是否使用了已弃用的 Liquid 价格字段,或购物车数据是否过时。
  • 使用 /cart.js进行验证:final_price / final_line_price应反映折扣。
  • 在主题中修复:将这些字段切换为 final_price和 final_line_price。
  • 减少数量后残留价格为 $0 的赠品行属于预期情况(Shopify 无法移除商品行);Bundlex 会在受支持的主题中清理该行,并且结账时的价格始终正确。

这篇文章对您有帮助吗?

您的反馈有助于我们改进文档。

谢谢,我们会继续改进这篇文章。

想与我们的团队聊天? 还有疑问?

仍需帮助?

我们的团队只需点击一下即可联系。给我们发送消息,我们会尽快回复。

我们使用少量 Cookie 来确保网站正常运行、衡量网站使用情况,并在您打开聊天组件时为其提供支持。请参阅我们的 Cookie 政策。