You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过函数替换WooCommerce可变定价文本并实现多币种显示

解决WooCommerce变体价格区域显示多币种的问题

要实现变体数据里展示多币种价格,我们可以通过WooCommerce的woocommerce_available_variation过滤器来修改生成的价格HTML,同时整合外部汇率数据。下面是完整的实现步骤:

1. 获取并解析汇率JSON数据

首先编写一个函数来获取指定来源的汇率数据,假设你的API返回格式是类似{"USD": 0.85, "EUR": 0.92}的键值对(键为币种代码,值为相对基础货币的汇率):

function get_exchange_rates() {
    // 替换成你的汇率API地址
    $api_url = 'https://your-exchange-rate-source.com';
    
    // 发起请求并处理响应
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) {
        return false;
    }
    
    $body = wp_remote_retrieve_body($response);
    $rates = json_decode($body, true);
    
    // 验证解析结果有效性
    if (!is_array($rates)) {
        return false;
    }
    
    return $rates;
}

2. 替换变体的price_html内容

通过woocommerce_available_variation过滤器,修改原有的价格HTML结构,插入多币种价格:

add_filter('woocommerce_available_variation', 'custom_variation_multicurrency_price', 10, 3);
function custom_variation_multicurrency_price($variation_data, $product, $variation) {
    $show_variation_price = isset($variation_data['show_variation_price']) ? $variation_data['show_variation_price'] : true;
    
    if (!$show_variation_price) {
        return $variation_data;
    }
    
    // 获取变体基础价格(店铺默认货币价格)
    $base_price = $variation->get_price();
    if (empty($base_price)) {
        return $variation_data;
    }
    
    // 获取汇率数据,失败则保留原价格
    $exchange_rates = get_exchange_rates();
    if (!$exchange_rates) {
        $variation_data['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>';
        return $variation_data;
    }
    
    // 构建多币种价格HTML
    $multicurrency_html = '<span class="price">' . $variation->get_price_html() . '</span>';
    $multicurrency_html .= '<div class="multicurrency-prices">';
    
    foreach ($exchange_rates as $currency_code => $rate) {
        // 计算转换后价格并格式化
        $converted_price = number_format($base_price * $rate, 2);
        $multicurrency_html .= '<span class="currency-price">' . $currency_code . ': ' . wc_price($converted_price, array('currency' => $currency_code)) . '</span>';
    }
    
    $multicurrency_html .= '</div>';
    
    // 替换原有price_html字段
    $variation_data['price_html'] = $multicurrency_html;
    
    return $variation_data;
}

3. 样式优化(可选)

为了让多币种价格显示更协调,添加基础CSS样式:

.multicurrency-prices {
    margin-top: 8px;
    font-size: 0.9em;
    color: #666;
}

.multicurrency-prices .currency-price {
    margin-right: 15px;
    display: inline-block;
}

关键提示

  • 请确保你的汇率API返回格式符合预期,能被json_decode正确解析为数组
  • 使用wc_price()函数可以自动适配WooCommerce的货币格式设置,避免手动处理符号和小数位
  • 建议给汇率数据添加缓存(比如用wp_cache_set()和wp_cache_get()),减少API请求频率,提升页面加载速度

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:23