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 "¥"; else return $currency_symbol; } }
估计以后的版本会修正这个问题,但愿如此。