Я реалізував користувальницький плагін Magento 2, щоб змінити спеціальну ціну на деякі продукти програмно. Це було успіхом для фронтенду, але все ж у webapi я отримую оригінальну спеціальну ціну.
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="VendorModuleApiPromotionManagementInterface" type="VendorModuleModelPromotionManagement"/>
<type name="MagentoCatalogModelProduct">
<plugin name="change_product" type="VendorModulePluginProduct" sortOrder="1" disabled="false"/>
</type>
</config>
VendorModulePluginProduct.php
afterGetSpecialPrice () не викликається при використанні webapi
.....
public function afterGetSpecialPrice(MagentoCatalogModelProduct $subject, $result)
{
if(isset($this->data)){
return $this->data["special_price"]; // $60.00
}
return $result; // $70.00
}
.....
результат на головній сторінці: 60,00 дол. США, результат у вебапі: $ 70,00 (оригінальна спеціальна ціна)
Що може бути причиною?
Відповіді:
0 для відповіді № 1за зразком коду magento2-зразки необхідно використовувати метод afterGetList у класі плагінів.
di.xml
<type name="MagentoCatalogApiProductRepositoryInterface">
<plugin name="change_special_price" type="VendorModulePluginRepository"/>
</type>
VendorModulePluginRepository.php
<?php
namespace VendorModulePlugin;
class Repository
{
public function afterGetList(MagentoCatalogApiProductRepositoryInterface $subject,MagentoFrameworkApiSearchResults $searchResult) {
foreach ($searchResult->getItems() as $product) {
$product->setData("special_price",60.0000); //custom special price
}
return $searchResult;
}
}