Introduccion

Con el tiempo, al actualizar productos, cambiar temas o modificar configuraciones de imagen en PrestaShop, pueden generarse inconsistencias en las miniaturas y la caché de imágenes. Estas inconsistencias se traducen en imágenes rotas, falta de proporciones correctas o simplemente en una experiencia visual deficiente para el usuario final.

En este artículo veremos cómo forzar la regeneración de miniaturas desde PHP, paso a paso, aprovechando las clases nativas de PrestaShop sin depender de módulos adicionales.

  1. Estructura de imágenes en PrestaShop

PrestaShop genera varias versiones de una imagen original en distintos tamaños (miniaturas) para adaptarlas a los diferentes bloques del tema: listados, productos, carritos, etc.

Estas miniaturas se definen en:

  • Back-office > Diseño > Imagenes > Tipos de imagen

Y se almacenan físicamente en:

/img/p/

Con una estructura fragmentada por ID (ejemplo: /img/p/1/4/5/145.jpg).

Cada imagen tiene varias versiones como:

  • 145-home_default.jpg
  • 145-cart_default.jpg
  • 145-large_default.jpg
  1. Cuándo necesitas regenerar miniaturas
  • Cambiaste los tamaños de imágenes en el tema
  • Reinstalaste o modificaste un tema
  • Migraste desde otra tienda o subiste imágenes masivamente por FTP
  • Las miniaturas se corrompieron o están desactualizadas

En estos casos, regenerarlas desde PHP evita tener que hacerlo manualmente desde el back-office, especialmente en tiendas grandes.

  1. Regenerar miniaturas con PHP (manual)

Puedes crear un archivo como regenerar_imagenes.php en la raíz de tu instalación de PrestaShop:

<?php

require(dirname(__FILE__).’/config/config.inc.php’);

require(dirname(__FILE__).’/init.php’); 

$types = ImageType::getImagesTypes(‘products’); 

$products = Product::getProducts(Context::getContext()->language->id, 0, 0, ‘id_product’, ‘ASC’); 

foreach ($products as $product) {

    $images = Image::getImages(Context::getContext()->language->id, $product[‘id_product’]); 

    foreach ($images as $img) {

        $image = new Image($img[‘id_image’]);

        $image_path = $image->getPathForCreation(); 

        foreach ($types as $type) {

            ImageManager::resize(

                $image_path.’.jpg’,

                $image_path.’-‘.$type[‘name’].’.jpg’,

                (int)$type[‘width’],

                (int)$type[‘height’]

            );

        }

    }

echo «Miniaturas regeneradas con éxito.»;

?>

Este script recorre todos los productos, busca sus imágenes, y regenera las miniaturas en todos los formatos definidos.

  1. Borrar caché de imágenes

Regenerar miniaturas no borra automáticamente la caché del sistema. Puedes hacerlo manualmente o desde PHP:

Tools::clearSmartyCache();

Tools::clearXMLCache();

Media::clearCache();

O eliminar el contenido de /img/tmp/ y /var/cache/ si estás en PrestaShop 1.7+.

  1. Automatización con CRON o backend

Puedes ejecutar este script:

  • Desde consola:

php regenerar_imagenes.php

  • Desde navegador: https://tu-tienda.com/regenerar_imagenes.php
  • Con un CRON job regular:

0 4 * * 0 php /ruta/tu-tienda/regenerar_imagenes.php

  1. Consideraciones adicionales
  • Si tienes muchos productos, este proceso puede tardar varios minutos.
  • Asegúrate de tener suficiente espacio en disco.
  • Verifica permisos de escritura en /img/p/

Apéndice: Fragmento de código clave

Regenerar miniaturas para todas las imágenes:

foreach ($types as $type) {

    ImageManager::resize(

        $image_path.’.jpg’,

        $image_path.’-‘.$type[‘name’].’.jpg’,

        (int)$type[‘width’],

        (int)$type[‘height’]

    );

}

Limpiar caché desde PHP:

Tools::clearSmartyCache();

Tools::clearXMLCache();

Media::clearCache();

Conclusión

La regeneración de miniaturas desde PHP es una herramienta imprescindible para mantener la consistencia visual de tu tienda PrestaShop, especialmente en entornos donde se hacen cambios masivos, migraciones o automatizaciones.

Este enfoque es seguro, reproducible y mucho más eficiente que hacerlo desde la interfaz web si estás trabajando con catálogos grandes o necesitas integrarlo en flujos DevOps.

Ir al contenido