WooCommerce明文邮件不显示货币符号

时间:2020-09-03 作者:abms

将纯文本设置为电子邮件类型时,WooCommerce订单邮件不显示货币符号。我的设置如下。

Language Japanese
Currency Japanese yen 
WooCommerce Ver. 4.4.1
WordPress 5.5.1
Theme: StoreFront
如果我将货币更改为另一种货币,例如“澳元”,则价格中会添加美元符号。或者,当我将HTML邮件设置为电子邮件类型时,日元符号会毫无问题地添加到价格中。

我也尝试过将语言设置更改为英语,但无论如何都不起作用。我想知道为什么,是否有办法解决这个问题。

日语邮件示例(我希望在价格中添加日元符号)

小計:      188
送料:      1,390 送料として
決済方法:    銀行振込
合計金額:    1,577 0
英文邮件示例

Subtotal:        188
Shipping:        1,390 via shipping
Payment method:  credit card (Stripe)
Total:   1,578

1 个回复
SO网友:qsi

在WooCommerce中发送纯文本电子邮件之前,所有HTML标记和一些HTML实体都会被剥离。具体而言,WooCommerce使用wp_strip_all_tagspreg_replace 使用一组自定义的模式和替换来执行此操作。您可以在中检查代码get_content 在里面includes/emails/class-wc-emails.php.

看来在这个preg_replace 操作,WooCommerce删除HTML实体¥ (¥)因此,您在纯文本电子邮件中看不到货币。注意$plain_replace 包括美元和英镑的实际符号,因此不会删除这些货币。

不幸的是,无论是模式还是替换($plain_search$plain_replace) 可以通过过滤器进行扩展,因此您可以选择排除¥ 被替换将是更改插件内部的代码。但是,每当您更新WooCommerce时,这些更改都将被覆盖。

在发送电子邮件之前,将货币符号从电子邮件内容中删除的最可行解决方案是在中覆盖货币符号get_woocommerce_currency_symbols 在里面includes/wc-core-functions.php 使用过滤器woocommerce_currency_symbols.在你的情况下,你会¥ 具有YEN.

但是,该符号也用于商店中显示货币符号的所有位置(例如购物车、收银台、产品页面等)。也就是说,您的网站将在所有这些元素中显示日元而不是日元。

在我看来,对于所有代码不使用特殊符号的货币(如AMD、EGP、CHF等),这是最合理的方法。

在您的具体情况下,如果;字母代码“;应仅在电子邮件中使用,我建议扩展/覆盖WooCommerce电子邮件模板。您应该能够在不覆盖实际电子邮件模板的情况下做到这一点(从而保持向上兼容性和后续更新问题),方法是将挂钩的操作替换为自定义操作(例如woocommerce_email_order_details 在里面customer-on-hold-order.php).

相关推荐