![](/img/trans.png)
[英]woocommerce_after_calculate_totals not working to update cart item price
[英]Update cart item price after collect totals magento2
我正在尝试更新购物车商品价格取决于报价总额。 我已经让观察者在保存购物车之前更改价格。 我的问题是更改项目的值在错误的时间更改。 例子:
我在购物车中有两件商品 #1 商品 - 150 美元,#2 商品 - 10 美元,当我更改数量时,该商品的第一件商品总额设置为 300 美元(没关系),但是 #2 商品的价格更改为 0(这是好的)但在数据库中我仍然看到price, base_price, row_total, base_row_total, price_incl_tax, base_price_incl_tax, row_total_incl_tax, base_row_incl_tax
值为 10 美元。 当我再次更改 #1 商品的数量时,#2 商品将价格更改为 10 美元,但数据库中的值现在设置为 0。我应该在哪里以及如何更改价格以在数据库中获得正确的数据? 这是我的代码:
事件.xml:
<event name="checkout_cart_save_before">
<observer name="Vendor::save_cart” instance="Vendor\Observer\BeforeCartSaveObserver" shared="false"/>
</event>
观察员:
public function execute(\Magento\Framework\Event\Observer $observer)
{
$cart = $observer->getCart();
$quote = $this->checkoutSession->getQuote();
$quote->collectTotals();
$quote->setTotalsCollectedFlag(false);
foreach ($quote->getAllVisibleItems() as $item) {
$product = $item->getProduct();
if (!$product->getIsFree()) {
continue;
}
$freeItem = $item;
break;
}
if ($quote->getGrandTotal() > 240) {
$item->setCustomPrice(0)
->setOriginalCustomPrice(0)
->getProduct()->setIsSuperMode(true);
} else {
$product = $freeItem->getProduct();
$defaultProductPrice = $product->getPriceInfo()
->getPrice('regular_price')
->getAmount()
->getBaseAmount();
$item->setConvertedPrice($defaultProductPrice)
->setCustomPrice($defaultProductPrice)
->setOriginalCustomPrice($defaultProductPrice);
$item->setPrice($defaultProductPrice)->setBaseOriginalPrice($item->getProduct()->getPrice());
}
$item->calcRowTotal();
return $this;
}
尝试删除 $quote->setTotalsCollectedFlag(false); 或调用 $quote->collectTotals(); 更改价格后。 我看到它帮助了一些人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.