我需要计算添加了多种产品和优惠券的购物车的总金额。我需要获得总数而不更改全局 WC()-> cart 。所以我的想法是创建一个临时购物车,添加所有物品和优惠券,然后返回WC_Cart:get_total();
这是我的代码:
//5438 is my product (simple subscription, $55 with a $50 signup fee)
//product_schedule_discount is the coupon code that removes 100% of the signup fee
$tmpCart = new WC_Cart();
$tmpCart->add_to_cart( 5438, '1', '0', array(), array() );
$tmpCart->apply_coupon('product_schedule_discount');
$tmpCart->calculate_totals( );
$cartTotal = $tmpCart->get_total();
$tmpCart->remove_coupon('product_schedule_discount');
return $cartTotal;
当我获得总计而不添加优惠券时,此方法有效。但是,当我想添加优惠券时,似乎可以将优惠券应用于用户会话,因为当我转到购物车页面时(与上面使用上述代码的地方完全分开,我看到一条消息“优惠券已成功加载。 '。当我刷新页面时,它就消失了。 第二个问题是,在我要求再次运行之前,它不会返回新的总计(已应用优惠券)。
为什么在购物车页面上显示我的消息?它是否不适用于我告诉过的购物车?在这种情况下,我的 $ tmpCart ?
我需要获取购物车的总数,因为我正在编写自己的模块,该模块允许我的客户创建模型购物车。
这里是我使用的方法的参考:
答案 0 :(得分:1)
您不能同时拥有2个购物车对象。创建新的购物车对象时,它将替换现有的购物车对象(如果有)。购物车对象是一个实时的前端对象,因此无法以这种方式工作。
对于消息:这很正常,因为apply_coupon()
方法会生成一条通知,该通知存储在WC_Session
中,然后在加载页面后立即显示(或与ajax)。
有关总问题:我没有您涉及的问题。我得到了正确的总数,即购物车总额与优惠券的折扣。