Puede agregar crear un archivo de precio separado para el producto configurable y el código dentro de él.
catalog_product_prices.xml
agregar código
<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
<referenceBlock name="render.product.prices">
<arguments>
<argument name="default" xsi:type="array">
<item name="prices" xsi:type="array">
<item name="final_price" xsi:type="array">
<item name="render_class" xsi:type="string">Vendor\Module\Pricing\Render\FinalPriceBox</item>
<item name="render_template" xsi:type="string">Vendor_Module::product/price/final_price.phtml</item>
</item>
</item>
</argument>
<argument name="configurable" xsi:type="array">
<item name="prices" xsi:type="array">
<item name="final_price" xsi:type="array">
<item name="render_class" xsi:type="string">Magento\ConfigurableProduct\Pricing\Render\FinalPriceBox</item>
<item name="render_template" xsi:type="string">Vendor_Module::product/price/final_price_configurable.phtml</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</layout>
ya que es producto configurable no es posible verificarlo por getFinalPrice()
y getSpecialPrice()
.
agregue el siguiente código para el producto configurable.
$priceModel = $block->getPriceType('regular_price');
$finalPriceModel = $block->getPriceType('final_price');
<?php if($finalPriceModel->getAmount() < $priceModel->getAmount()) : ?>
<span class="old-price sly-old-price no-display config-old" style="text-decoration: line-through;">
<?= $block->renderAmount($priceModel->getAmount(), [
'price_id' => $block->getPriceId('old-price-' . $idSuffix),
'price_type' => 'oldPrice',
'include_container' => true,
'skip_adjustments' => true
]); ?>
</span>
<?php
$array = (array)$priceModel->getAmount();
$prefix = chr(0).'*'.chr(0);
$price = $array[$prefix.'amount'];
$array = (array)$finalPriceModel->getAmount();
$prefix = chr(0).'*'.chr(0);
$finalPrice = $array[$prefix.'amount'];
$percentage = 100 - round(($finalPrice / $price)*100);
echo "<span class='percent-amt'>- ".$percentage."%</span>";
?>
<?php endif; ?>
Nota: puede obtener esto directamente cambiando el archivo app\design\frontend\Vendor\theme\Magento_Catalog\templates\product\price\final_price.phtml
, solo tiene que poner la condición para el producto configurable
porcentaje se mostrará en la página de listado