You should override Magento\Catalog\Model\Product\Type\Price
etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Model\Product\Type\Price" type="SY\Modulename\Model\Catalog\Product\Type\Price" />
</config>
and redefine getBasePrice
<?php
namespace SY\Modulename\Model\Catalog\Product\Type;
class Price extends \Magento\Catalog\Model\Product\Type\Price {
public function getBasePrice($product, $qty = null) {
$price = (float) $product->getPrice();
return min(
$this->_applyTierPrice($product, $qty, $price),
$this->_applySpecialPrice($product, $price),
1.11 // where is your custom product price
);
}
}
for some reasons magento can ignore override for Magento\Catalog\Model\Product\Type\Price
and then you should override Magento\Catalog\Model\Product\Type\FrontSpecialPrice
Also you can do this via observer
events.xml
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="catalog_product_get_final_price">
<observer name="custom_price" instance="SY\Modulename\Observer\CatalogProductGetFinalPrice"/>
</event>
</config>
and
<?php
namespace SY\Modulename\Observer;
class CatalogProductGetFinalPrice implements \Magento\Framework\Event\ObserverInterface {
public function execute(\Magento\Framework\Event\Observer $observer){
$_product->setFinalPrice(your custom price);
return $this;
}
}