我希望有人可以帮助我! 我使用的是WooCommerce Currency Switcher by PluginUs.NET.插件,一切正常,直到我进入购物车页面为止,那里的价格是第二次转换,先转换后再添加到购物车中,然后进入购物车页面。>
因此,我在那里的支持页面中进行搜索,并找到了暗示此solution的主题,但是当我添加代码时,所有内容仍然相同,也许是因为该代码是三年前制作的,现在不支持该代码。新的Woocommerce版本,这是建议的代码:
add_action('woocommerce_before_calculate_totals', 'fix_currency_conversion');
function fix_currency_conversion($cart_object){
global $WOOCS;
$cur_currency = $WOOCS->current_currency;
$currencies = $WOOCS->get_currencies();
$conversion_rate = $currencies[$WOOCS->current_currency]['rate'];
if($cur_currency == 'HKD'){
foreach ( $cart_object->cart_contents as $cart_item_key => $cart_item ) {
$cart_item['data']->price = $cart_item['data']->price / $conversion_rate;
}
}
}
答案 0 :(得分:1)
已经晚了,但是对其他人会有所帮助。
您需要更改:
namespace MyNamespace {
public abstract class EnumerateClass<Type, InheritingClass> : IEquatable<InheritingClass>
where Type : IEquatable<Type>
where InheritingClass : EnumerateClass<Type, InheritingClass> {
internal readonly Type Identifier;
protected EnumerateClass (Type identifier) {
this.Identifier = identifier;
}
public bool Equals(InheritingClass obj)
=> this.Identifier.Equals(obj.Identifier);
public static explicit operator Type(EnumerateClass<Type, InheritingClass> obj)
=> obj.Identifier;
}
public sealed class MyNumber : EnumerateClass<int, MyNumber> {
private MyNumber(int identifier) : base(identifier) { }
public static readonly MyNumber None = new Number(0);
public static readonly MyNumber One = new Number(1);
public static readonly MyNumber Two = new Number(2);
...
public override string ToString() {
switch (this.Identifier) {
case 0: return "None";
case 1: return "One";
case 2: return "Two";
...
}
}
}
}
有
$cart_item['data']->price = $cart_item['data']->price / $conversion_rate;