Estou trabalhando em um módulo de desconto de produto. Eu fiz isso via plugin e observador. está funcionando bem na página do produto e na página da lista. Mas o filtro de preço não está funcionando de acordo com o preço atualizado do produto.
Aqui está o meu código que estou usando para personalizar o preço.
Nome do fornecedor / Nome do módulo / etc / di.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Pricing\Price\FinalPrice">
<plugin name="custom_discount_catalog_pricing_price_finalprice" type="VendorName\ModuleName\Plugin\FinalPrice" />
</type>
</config>
Nome do fornecedor / Nome do módulo / etc / events.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<event name='catalog_product_get_final_price'>
<observer name='customdiscount_finalprice' instance='VendorName\ModuleName\Observer\ProcessFinalPrice'/>
</event>
</config>
VendorName / ModuleName / Observer / ProcessFinalPrice.php
<?php
namespace VendorName\ModuleName\Observer;
use Magento\Framework\Event\ObserverInterface;
class ProcessFinalPrice implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
$product = $observer->getEvent()->getProduct();
$old = $product->getData('final_price');
$discountedPrice = $old - ($old * 0.20);
$product->setData('final_price',$discountedPrice);
}
}
VendorName / ModuleName / Plugin / FinalPrice.php
<?php
namespace VendorName\ModuleName\Plugin;
class FinalPrice
{
public function afterGetValue(\Magento\Catalog\Pricing\Price\FinalPrice $subject, $result)
{
$discountedPrice = $result - ($result * 0.20);
return $discountedPrice;
}
}
Nota: o preço com desconto está no nível do cliente