Hola @ignacioes y gracias a @miriamdev y @ruben_deco por sus aportaciones.
El problema que describes es muy común y se debe a dos factores principales: la caché de Smarty y, en ocasiones, cómo se estructuran las características en el objeto product dentro de la plantilla.
Primero, lo que comentaba @miriamdev: en PrestaShop 9.0.3, debes ir a Parámetros Avanzados > Rendimiento, y en la sección de Smarty, asegurarte de que la opción 'Compilación de la plantilla' esté en 'Forzar compilación cada vez que se modifique'. Luego, borra la caché del navegador y la del propio PrestaShop (borrar caché) para que los cambios se reflejen.
Sobre el código, tu enfoque es correcto, pero podemos simplificarlo un poco y asegurarnos de que la insignia se muestre correctamente. Aquí te dejo un fragmento que podrías usar, colocándolo dentro del div.product-thumbnail-container, antes del enlace a.thumbnail:
<div class="product-thumbnail-container">
{if isset($product.features)}
{foreach from=$product.features item=feature}
{if $feature.name|trim == 'Etiqueta promocional' && $feature.value|trim == 'Bestseller'}
<span class="label-promo bestseller">Bestseller</span>
{elseif $feature.name|trim == 'Tipo de Producto' && $feature.value|trim == 'Eco'}
<span class="label-promo eco">Producto Ecológico</span>
{/if}
{/foreach}
{/if}
Explicación de los cambios:
- He añadido
|trim a $feature.name y $feature.value. A veces, pueden haber espacios en blanco al principio o al final de los valores de las características, lo que impediría la coincidencia.
- He incluido un
elseif para el ejemplo de 'Eco', mostrando cómo podrías extenderlo para múltiples insignias.
- La posición dentro de
product-thumbnail-container es clave para que se muestren sobre la imagen. Asegúrate de añadir algo de CSS en tu tema hijo (por ejemplo, en _dev/css/custom.css o similar) para que .label-promo tenga un position: absolute y un z-index adecuado para que se vea bien.
Con estos pasos, deberías ver tus insignias sin problema.