Campo Visual
Tienda de óptica
Tienda online de una óptica de Alta Gracia, en WooCommerce. Trabajé en el catálogo, las variaciones de color y la sincronización de stock.
El trabajo se reparte entre un plugin propio (CV Carruseles), fragmentos de PHP que se cargan en el sitio y scripts de Python que se conectan con la API REST de WooCommerce y con el sistema de gestión de la óptica.
Herramientas desarrolladas
Hechas para Campo Visual, ordenadas de la más compleja a la más simple.
Reestructuración del catálogo a productos variables
- Python
- API REST de WooCommerce
- PHP
Qué hace
El catálogo tenía un producto por cada color de cada modelo. Los scripts leen el catálogo en modo solo lectura, reconstruyen la relación entre código del sistema de gestión, SKU e id de WooCommerce, y agrupan los productos por marca y modelo en planillas de revisión. Después crean un producto variable por modelo con una variación por color, cada una con su SKU original, el código del sistema de gestión guardado en la variación, su galería y su descripción, y muestras de color tomadas de la imagen de cada variación.
Los productos viejos no se borran: pasan a borrador con el SKU terminado en -OLD. Un fragmento de PHP redirige con un 301 cada URL vieja al producto nuevo con el color ya elegido.
Qué complejidad tiene
El riesgo era cambiar un catálogo en vivo sin romper la sincronización de stock, que depende del SKU y del código del sistema de gestión. Por eso cada variación conserva el SKU original y guarda el código en un campo propio, y los productos viejos quedan retenidos en lugar de eliminarse.
El proceso está pensado para poder corregirse: la migración es una simulación por defecto y solo escribe con una opción explícita, la producción exige una confirmación aparte, cada corrida deja un registro por grupo y un script de reversión lo usa para restaurar SKU, estado y visibilidad de los productos viejos. Si falla un producto dentro de un grupo, se restaura ese producto viejo y se quita su color del producto nuevo; si fallan todos, se borra el producto nuevo. Los grupos ya migrados se saltean al repetir la corrida. Otro script verifica el resultado contra el catálogo.
Sincronización de stock y precios con el sistema de gestión
- Python
- API REST de WooCommerce
Qué hace
Tres pasos: generar un índice de SKU a partir del catálogo, armar la tabla que vincula cada código del sistema de gestión con su id de WooCommerce (con el id del producto padre y el tipo) y actualizar stock, precio o ambos desde el archivo exportado. Los productos simples se envían a la API en lotes de 100, y las variaciones en lotes por producto padre. Cada corrida deja un reporte con el resultado de cada fila.
Qué complejidad tiene
Las variaciones se actualizan por una ruta distinta de la de los productos simples, agrupadas por padre, y los ids de WooCommerce cambian con cada migración, por lo que el índice y la tabla de vínculos se vuelven a generar. El índice ignora los productos retenidos con SKU terminado en -OLD y, si la API falla, el script termina con error en lugar de guardar un índice incompleto.
Un lote puede devolver éxito aunque falle algún ítem, así que el reporte marca fila por fila si se actualizó, falló o no tenía código vinculado. Tiene una simulación que arma la cola sin enviar nada y una opción para abortar si el destino no es el sitio esperado. Al actualizar precios, borra el precio de oferta.
Plugin CV Carruseles
- PHP
- JavaScript
- CSS
- WooCommerce
Qué hace
Un plugin de WordPress propio, con un tipo de contenido para los carruseles. En el panel se elige el modo (productos a mano con buscador, categoría, marca, más vendidos, en oferta, novedades o destacados), el orden, la cantidad de tarjetas visibles y si se ocultan los agotados. Cada carrusel se inserta con un shortcode y muestra las mismas tarjetas que el catálogo, con muestras de color, precio, cuotas y botón de compra.
Qué complejidad tiene
Para reutilizar las tarjetas del catálogo, el plugin pasa por el motor de shortcodes de WooCommerce, que no filtra por marca ni oculta agotados. Se agregó un filtro de consulta acotado a cada carrusel, identificado con una clase marcadora, que se quita al terminar de dibujarlo para no afectar otras consultas.
Los recursos se cargan solo en las páginas que usan el shortcode, incluso cuando está dentro del contenido de un constructor de páginas, y con una carga tardía como respaldo cuando está en un widget o una plantilla. La cantidad de tarjetas por tamaño de pantalla se pasa como variables CSS y no como HTML fijo, para que funcione con cachés. Las flechas se ocultan cuando no hay nada para desplazar.
Carga de catálogo desde planillas y Google Drive
- Python
- API REST de WooCommerce
- Google Drive API
Qué hace
Un script por marca lee la planilla y, para cada fila, crea la marca y las categorías si no existen, busca en Drive la carpeta del modelo, toma las fotos del color que corresponde, las sube a la biblioteca de medios de WordPress y crea el producto con precio, stock, medidas y descripciones. Otro script descarga carpetas de Drive y convierte las imágenes a WebP con calidad 85.
Qué complejidad tiene
Hay que cruzar tres fuentes sin una clave común: la planilla, carpetas de Drive nombradas por modelo (se busca el nombre exacto y, si no aparece, uno aproximado) y el catálogo. El script puede repetirse sin duplicar: si el SKU ya existe, saltea la fila. Los pedidos a la API se reintentan con espera creciente ante errores de red o del servidor, y un producto sin imágenes se crea como borrador en lugar de publicarse incompleto.
Avisame cuando vuelva
- PHP
- JavaScript
- WooCommerce
Qué hace
Cuando un producto simple o el color elegido de uno variable está agotado, la ficha muestra un formulario con email y aceptación de la política de privacidad. Los emails se guardan en el propio producto o variación. Cuando WooCommerce cambia su estado de stock a disponible, se envía un mail con foto y enlace a cada persona anotada. En el catálogo, el botón de un producto agotado pasa a decir «Avisame cuando vuelva». En el panel hay una caja en cada producto y una página con el listado completo y exportación a CSV.
Qué complejidad tiene
Un producto variable obliga a mostrar el formulario recién cuando se elige un color agotado, y a asociar el pedido a esa variación y no al producto padre. El aviso se engancha a los cambios de estado de stock tanto de productos como de variaciones, vacía la lista antes de enviar para que un reintento nunca mande dos veces el mismo mail, y se envía en el momento en lugar de depender de la cola de tareas programadas.
El formulario tiene protección contra bots y contra envíos abusivos, y rechaza los pedidos de productos que ya tienen stock.
Color y precio por variación
- PHP
- JavaScript
- WooCommerce
Qué hace
Cuatro fragmentos de PHP. El primero preselecciona un color: respeta el predeterminado del panel si tiene stock, si no toma la primera variación con stock, y si todas están agotadas toma la primera. El segundo muestra en el catálogo un único precio, el de ese color, y recalcula la línea de cuotas sobre él. El tercero hace que, en la ficha, el precio principal siga al color elegido y oculta el precio duplicado debajo de las muestras. El cuarto hace que la edición masiva de precios del panel también cambie las variaciones.
Qué complejidad tiene
La regla de qué color mostrar se comparte entre el catálogo y la ficha, para que la foto, el precio y las cuotas de la tarjeta correspondan a la misma variación. La edición masiva de WooCommerce solo modifica precios de productos simples, porque los de un producto variable viven en sus variaciones. El fragmento replica sus operaciones (fijar, aumentar o reducir por monto o porcentaje, y precio rebajado) variación por variación.



