[英]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.