Hace tiempo que os dije que volvería. He tardado, pero aquí estoy para resolveros un problema que seguro que se os ha dado alguna vez en Prestashop: Ocultar productos sin existencias en el módulo ps_facetedsearch de Prestashop.

El «bendito» módulo de ps_facetedsearch siempre ha dado muchos problemas de rendimiento y también de usabilidad, pero puede cubrir necesidades básicas. Si tienes instalado este módulo y tienes la necesidad de ocultar los productos que están fuera de stock, cambiarlo es muy sencillo.

Antes de explicar cambios voy a indicar las versiones utilizadas.
– Prestashop: v1.7.6.4
– ps_facetedsearch: v3.7.1

Vamos al archivo /modules/ps_facetedsearch/src/Product/Search.php a la línea 147

case ‘id_attribute_group’:
   $operationsFilter = [];
   foreach ($filterValues as $attributeId => $filterValue) {
     $this->getSearchAdapter()->addOperationsFilter(
       ‘with_attributes_’ . $attributeId,
       [[[‘id_attribute’, $filterValue]]]
     );
   }
   break;
Y añadimos lo siguiente antes del break:
$operationsFilter[] = [
   [‘quantity’, [0], ‘>’],
];
$this->getSearchAdapter()->addOperationsFilter(
   self::STOCK_MANAGEMENT_FILTER,
   $operationsFilter
);
Esto lo que hace es añadir el filtro de stock después de todos los filtros aplicados por atributo, dado que queremos el stock por atributo de producto. Si un producto tiene varios colores, necesitaremos tener el stock por cada uno de ellos.
 
Como ves, es muy fácil de implementar.