为了在产品页面或小部件上显示产品价格,Magento 从基本价格、特价、等级价格或目录规则价格之一计算最低价格。可配置产品可以为子产品设置自己的价格,捆绑产品可以对捆绑应用固定价格。然后,当将产品添加到购物车时,其价格也会受到购物车价格规则的影响。

在本文中,我们将展示如何将您的自定义价格添加到购物车中的产品中。此操作将覆盖 Magento 计算的价格。

购物车中产品的自定义价格

以下是可以帮助您实现这一目标的 2 个简单步骤:

首先,安装自定义模块后,您声明一个名为 events.xml 的文件以捕获在将产品添加到购物车后发生的事件。

<供应商名称>/<模块名称>/etc/frontend/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
	<event name="checkout_cart_product_add_after">
		<observer name="customPriceInCart" instance="VendorName\ModuleName\Observer\CustomPriceInCart" />
	</event>
</config>

在这里,您声明了一个名为 customPriceInCart 的观察者,它将处理每次将产品添加到购物车时 Magento 调度的事件 checkout_cart_product_add_after。 

接下来,我们创建观察者类: 

<供应商名称>/<模块名称>/Observer/customPriceInCart.php

<?php
namespace VendorName\ModuleName\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;

class CustomPriceInCart implements ObserverInterface
{
	public function execute(\Magento\Framework\Event\Observer $observer)
	{
		//get the item just added to cart
		$item = $observer->getEvent()->getData('quote_item');
		//(optional) get the parent item, if exists
		$item = ($item->getParentItem() ? $item->getParentItem() : $item);
		// set your custom price
		$customPrice = 101;
		$item->setCustomPrice($customPrice);
		$item->setOriginalCustomPrice($customPrice);
		$item->getProduct()->setIsSuperMode(true);
	}
}

通过函数setIsSuperMode(true)为产品打开超级模式,您可以停止系统生成价格,然后设置您的自定义价格。

结果是每当将产品添加到购物车时,您的自定义价格都会替换原始价格。

结论

当产品出现在客户的购物车中时,本教程已成功修复了产品的价值。除了设置固定数字外,您还可以添加自己的函数并将其他类注入到观察者中以实现自定义定价逻辑。

感谢您阅读这篇文章。如果您在上面的代码中运行良好或在实现该方法时遇到任何问题,请告诉我们。