在 WooCommerce 购物车价格中显示 2 种货币的计算

Calculations displaying 2 Currencies in WooCommerce Cart prices

Rp 500000 (USD $ 37.49)

我想在 woocommerce 的购物车总计中显示如上所示的两种货币(小计、运费、折扣、保险[海关费用]、包装费[海关费用])。

我通过添加以下过滤器在小计、运费、折扣方面成功了。

但这对两项海关费用(保险费、包装费)不起作用。当我将 $price_us 添加到 .woocommerce-Price-amount.amount class 时,insurance/packing 费用金额将会出错。如果我没有将 $price_us 添加到 .woocommerce-Price-amount.amount class 一切都会好的,但只有 1 种货币。

function my_custom_price_format( $formatted_price, $price, $decimals, 
  $decimal_separator, $thousand_separator ) {
  $price_us_int = intval(preg_replace('/[^0-9]+/', '', $price), 10);
  $price_us_int = convert_idr_to_usd_cart($price_us_int);

  $price_us = "USD $ $price_us_int";

  return '<span class="woocommerce-Price-amount amount">' . $formatted_price .' ( '.$price_us.' )</span>';
}
add_filter( 'formatted_woocommerce_price', 'my_custom_price_format', 20, 5 );

有没有人可以帮我解决这个问题。

Update

主要有两个问题:

1) 你用错了钩子。相反,您应该使用 wc_price.

2) 在您的代码中,这是因为您应该直接使用未格式化的 $price 参数,而无需使用此参数:

$price_us_int = intval(preg_replace('/[^0-9]+/', '', $price), 10);

现在我没有你的自定义函数的代码convert_idr_to_usd_cart()我现在不知道你是如何计算的以及你如何设置小数点或此转换后的自定义价格。

所以我使用这个进行测试:

// Just for testing
function convert_idr_to_usd_cart( $price ){
    $convertion_rate = 0.016;
    $new_price = $price * $convertion_rate;
    return number_format($new_price, 2, '.', '');
}

这是正确的功能代码 (没有这个问题):

add_filter( 'wc_price', 'my_custom_price_format', 10, 3 );
function my_custom_price_format( $formatted_price, $price, $args ) {

    // The currency conversion custom calculation function
    $price_usd = convert_idr_to_usd_cart($price);

    // the currency symbol for US dollars
    $currency = 'USD';
    $currency_symbol = get_woocommerce_currency_symbol( $currency );
    $price_usd = $currency_symbol.$price_usd; // adding currency symbol

    // The USD formatted price
    $formatted_price_usd = "<span class='price-usd'> (USD $price_usd)</span>";

    // Return both formatted currencies
    return $formatted_price . $formatted_price_usd;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

此代码已经过测试并且有效。