Woocommerce 中文货币符号错误如何解决

优质
小牛编辑
138浏览
2023-12-01

Woocommerce对中文有那么一点支持,至少货币中可以找到我们的Chinese Yuan。不过讽刺的是,当你选择了人民币作为默认货币符号时,前台显示的确是英镑符号。

Note:该错误已经在Woocommerce 1.6.3版中修复,请升级到最新版本

为什么中文符号错误

这是个很小的错误,不知道为什么这么优秀的插件会犯这种简单的错误。

在woocommerce-core-functions.php中定义的get_woocommerce_currency_symbol()函数用来获取当前选择的货币的符号。并不复杂,只是一段简单的switch代码。

function get_woocommerce_currency_symbol( $currency = '' ) {
	if ( ! $currency ) $currency = get_woocommerce_currency();
	$currency_symbol = '';
	switch ($currency) :
		case 'BRL' : $currency_symbol = 'R$'; break;
		case 'AUD' : $currency_symbol = '$'; break;
		case 'CAD' : $currency_symbol = '$'; break;
		case 'MXN' : $currency_symbol = '$'; break;
		case 'NZD' : $currency_symbol = '$'; break;
		case 'HKD' : $currency_symbol = '$'; break;
		case 'SGD' : $currency_symbol = '$'; break;
		case 'USD' : $currency_symbol = '$'; break;
		case 'EUR' : $currency_symbol = '€'; break;
		case 'CNY' : $currency_symbol = '¥'; break;
		case 'JPY' : $currency_symbol = '¥'; break;
		case 'TRY' : $currency_symbol = 'TL'; break;
		case 'NOK' : $currency_symbol = 'kr'; break;
		case 'ZAR' : $currency_symbol = 'R'; break;
		case 'CZK' : $currency_symbol = 'Kč'; break;
		case 'MYR' : $currency_symbol = 'RM'; break;
		case 'DKK' : $currency_symbol = 'kr'; break;
		case 'HUF' : $currency_symbol = 'Ft'; break;
		case 'ILS' : $currency_symbol = '₪'; break;
		case 'PHP' : $currency_symbol = '₱'; break;
		case 'PLN' : $currency_symbol = 'zł'; break;
		case 'SEK' : $currency_symbol = 'kr'; break;
		case 'CHF' : $currency_symbol = 'CHF'; break;
		case 'TWD' : $currency_symbol = 'NT$'; break;
		case 'THB' : $currency_symbol = '฿'; break;
		case 'GBP' : $currency_symbol = '£'; break;
		default    : $currency_symbol = '£'; break;
	endswitch;
	return apply_filters( 'woocommerce_currency_symbol', $currency_symbol, $currency );
}

注意下面这行,就是定义人民币符号的,这里看不出有什么错误。

case 'CNY' : $currency_symbol = '¥'; break;

但在woocommerce/admin/settings/settings-init.php中定义的人民币代号并不是CNY,而是RMB

'RMB' => __( 'Chinese Yuan (¥)', 'woocommerce' ),

于是乎,当你选择人民币时,数据库存的其实是“RMB“而不是”CNY“,get_woocommerce_currency_symbol()函数找不到RMB这个东西,只好返回了默认符号英镑。

解决方法

知道错误的原因,解决方法也就一目了然了,把下面代码放到主题的functions.php中即可

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {

	add_filter('woocommerce_currency_symbol', 'fix_cn_currency_symbol', 10, 2);
	
	function fix_cn_currency_symbol( $currency_symbol, $currency ) {
		 if( $currency == 'RMB') return "&yen";
		 else return $currency_symbol;
	}
}

估计以后的版本会修正这个问题,但愿如此。