Shopify 多货币代码片段

一个用于显示多种货币价格并自动进行地理检测的 Liquid 代码片段。为没有 Shopify Markets 但需要国际销售的商店构建。

技术栈: Shopify, Liquid, JavaScript, REST API
查看代码

Shopify 多货币代码片段

一个在 Shopify 商店中显示本地货币价格的轻量级解决方案。这是为 Tru Fragrance 商店构建的,他们在完全迁移到 Shopify Markets 之前需要多货币显示。

问题

Shopify 的原生多货币需要 Shopify Payments,但并非所有地方都可用。许多商店需要:

  • 以访客的本地货币显示价格
  • 根据实时汇率转换
  • 在商店的基础货币中保持结账

工作原理

1. 地理检测

使用免费的 IP 地理位置 API 检测访客的国家:

// 检测访客国家
const response = await fetch('https://ipapi.co/json/');
const { country_code, currency } = await response.json();

2. 汇率缓存

从 exchangerate-api.com 获取每日汇率并缓存在 localStorage 中:

// 缓存汇率 24 小时
const CACHE_KEY = 'exchange_rates';
const CACHE_DURATION = 86400000; // 24 小时

3. Liquid 集成

包装现有价格显示的即插即用代码片段。该片段向价格元素添加 data-base-price 属性,并使用 Liquid 的 money 过滤器进行格式化。

安装

1. 添加代码片段

multi-currency.liquid 复制到主题的 snippets/ 文件夹。

2. 在主题中包含

theme.liquid 的结束 body 标签之前添加 multi-currency 的 Liquid render 标签。

3. 配置货币

编辑代码片段以设置支持的货币:

const SUPPORTED_CURRENCIES = ['USD', 'EUR', 'GBP', 'CAD', 'AUD'];

特性

  • 自动检测:首次访问时显示本地货币
  • 货币选择器:可选的下拉菜单用于手动选择
  • 持久偏好:记住访客的选择
  • 降级处理:如果 API 失败则优雅降级
  • 性能:延迟加载,积极缓存

自定义

选择器样式

下拉菜单有最小的默认样式 - 通过 CSS 类 .currency-selector 自定义。

添加货币

添加到支持列表并确保汇率 API 覆盖它。

舍入规则

按货币配置小数位数:

const DECIMALS = {
  USD: 2,
  JPY: 0,  // 日元没有小数
  EUR: 2,
};

限制

  • 显示的价格是估计值(结账使用商店货币)
  • 需要 JavaScript(显示基础货币作为后备)
  • 免费 API 有速率限制(1000 请求/月)

生产注意事项

对于高流量商店,考虑:

  • 自托管汇率
  • 使用付费地理位置服务
  • 实现服务器端检测

此代码片段可处理每月 10K+ 访客而无问题。


创建时间:2025年8月 许可证:MIT 状态:生产测试通过