计算显示WooCommerce Cart价格中的2种货币

时间:2017-07-26 05:26:04

标签: php wordpress woocommerce cart price

Rp 500000 (USD $ 37.49)

我想在woocommerce的Cart Totals中显示两种货币外观(小计,运费,折扣,保险[定制费用],包装费[定制费用])。

我已经成功通过添加以下过滤器进行小计,运费和折扣。

但这并不适用于两种定制费用(保险,包装费)。当我将$ price_us添加到.woocommerce-Price-amount.amount类时,保险/包装费金额将出错。如果我没有将$ price_us添加到.woocommerce-Price-amount.amount类,一切都会好的,但只有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 );

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

1 个答案:

答案 0 :(得分:1)

  

<强>更新

有两个主要问题:

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文件中,或者放在任何插件文件中。

此代码经过测试并有效。