Update Products by SKU (Batch Endpoint)
Plugin desarrollado para Wordpress que habilita un endpoint personalizado para ejecutar actualizaciones de stock de un producto registrado en Woocommerce haciendo referencia a su SKU
by Enmanuel Nava · github.com/endinterkambio/update-product-by-sku · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/endinterkambio/update-product-by-sku/archive/refs/heads/main.zip🧩 Update Products by SKU (Batch Endpoint for WooCommerce)
Un plugin esencial diseñado para operar como puente de alta velocidad entre WooCommerce y sistemas ERP externos o motores de Inteligencia Artificial. Expone endpoints REST customizados que permiten realizar consultas masivas y actualizaciones de productos utilizando el SKU como llave primaria, evadiendo la necesidad de conocer los IDs internos de WordPress.
Desarrollado para el ecosistema de Gusanito Lector, este plugin es la pieza central que permite sincronizar inventario, precios y recomendaciones calculadas por IA (Upsells) directamente desde un backend de Spring Boot.
✨ Características Clave
- Operaciones Batch por SKU: Actualiza múltiples productos en una sola petición HTTP.
- Comprobación de Existencias: Endpoint dedicado (
exists-by-sku) para mapear catálogos enteros y verificar si los SKUs están publicados en la tienda. - Integración con MLOps (IA): Recibe arrays de
iaRecommendationsbasados en SKU, busca sus IDs correspondientes en WordPress y los inyecta comoupsell_idspara venta cruzada. - Sincronización de Media Inteligente: Descarga imágenes desde URLs externas, las sube a la biblioteca de medios, asigna la principal como destacada y las restantes como galería, todo automáticamente.
- Gestión de Etiquetas Dinámica: Si una etiqueta no existe, la crea al vuelo.
⚙️ Instalación
- Copia la carpeta del plugin en el directorio:
/wp-content/plugins/update-products-by-sku/ - Activa el plugin desde el panel de administración de WordPress (
Plugins → Activar). - Verifica que WooCommerce esté activo. Si no lo está, el plugin mostrará una advertencia y abortará su inicialización para evitar errores fatales.
🔒 Autenticación
Los endpoints utilizan la autenticación básica estándar de WooCommerce (API Keys generadas desde WooCommerce → Ajustes → Avanzado → API REST).
Cabeceras Requeridas:
Authorization: Basic base64_encode("ck_XXXX:cs_YYYY")
Content-Type: application/json
🌐 Endpoints REST
1️⃣ Comprobar Existencia de SKUs (exists-by-sku)
Endpoint ultrarrápido para validar qué productos de una lista de SKUs ya existen en WooCommerce y cuál es su estado actual de publicación.
- Método:
POST - Ruta:
/wp-json/wc/v3/products/exists-by-sku
Petición:
{
"skus": ["ABC-001", "LIB-102", "INEXISTENTE-999"]
}
Respuesta:
{
"ABC-001": {
"exists": true,
"published": true,
"status": "publish",
"product_id": 345
},
"INEXISTENTE-999": {
"exists": false
}
}
2️⃣ Actualizar Productos por SKU (update-by-sku)
Permite actualizar uno o varios productos. Soporta tanto un objeto JSON simple (para un solo producto) como un Array de objetos (Batch).
- Método:
POST - Ruta:
/wp-json/wc/v3/products/update-by-sku
Petición Batch:
[
{
"sku": "ABC-001",
"regular_price": "19.99",
"stock_quantity": 10,
"iaRecommendations": [
{ "sku": "LIB-102", "rankOrder": 1 },
{ "sku": "LIB-105", "rankOrder": 2 }
]
},
{
"sku": "ABC-002",
"status": "draft"
}
]
🧩 Campos Soportados para Actualización
| Campo | Tipo | Descripción |
|---|---|---|
sku |
String | SKU actual del producto a modificar (Obligatorio) |
new_sku |
String | Nuevo SKU (El plugin valida que no colisione con otro producto) |
name |
String | Nombre / Título del producto |
slug |
String | Permalink / Slug personalizado |
regular_price |
String | Precio normal |
sale_price |
String | Precio de oferta |
on_sale |
Boolean | Activa/desactiva la oferta (true/false) |
stock_quantity |
Integer | Cantidad en inventario físico |
manage_stock |
Boolean | Habilitar gestión de stock (true/false) |
description |
HTML | Descripción larga |
short_description |
HTML | Descripción corta |
status |
String | Estado (publish, draft, private, etc.) |
featured |
Boolean | Marcar como producto destacado |
date_created |
Date | Fecha de creación (YYYY-MM-DD HH:MM:SS) |
date_modified |
Date | Fecha de modificación (YYYY-MM-DD HH:MM:SS) |
date_on_sale_from / to |
Date | Rango de fechas para el precio de oferta |
categories |
Array | Array de categorías ([{ "id": 12 }]) |
tags |
Array | Array de etiquetas ([{ "name": "Infantil" }] o [{ "id": 5 }]) |
images |
Array | Array de URLs para multimedia ([{ "src": "https://..." }]) |
iaRecommendations |
Array | Array de SKUs para Venta Cruzada / Upsells ([{ "sku": "XYZ" }]) |
🤖 Inyección de Recomendaciones IA (Upsells)
Una de las capacidades más avanzadas del plugin en la v1.7.x es la inyección de recomendaciones (Upsells) generadas por modelos de Machine Learning (ej. TF-IDF), las cuales operan con SKUs, mientras que WooCommerce nativamente requiere IDs.
Al recibir un payload en iaRecommendations, el plugin:
- Ordena las recomendaciones respetando el
rankOrder. - Traduce cada
skurecomendado a su respectivoproduct_iden la base de datos de WordPress. - Descarta silenciosamente los SKUs que no existan en la tienda.
- Asigna los IDs resultantes como
upsell_idsdel producto principal.
🧮 Respuestas y Manejo de Errores
El endpoint de actualización devuelve un resumen estadístico de la transacción batch, permitiendo al sistema orquestador saber exactamente qué falló.
Respuesta Exitosa / Parcial:
{
"updated": 1,
"failed": 1,
"results": [
{
"message": "Producto actualizado correctamente.",
"id": 345,
"sku": "ABC-001",
"status": "publish"
},
{
"sku": "ZZZ-999",
"error": "Producto no encontrado."
}
]
}
Tabla de Errores Comunes
| Error | Significado |
|---|---|
"SKU no especificado." |
El objeto del batch no contiene la llave sku. |
"Producto no encontrado." |
El sku consultado no existe en WooCommerce. |
"El nuevo SKU ya existe en otro producto." |
Se intentó hacer un cambio a un new_sku que ya está tomado. |
🧱 Registro de Cambios (Changelog)
🆕 v1.7.2
- Agregado el nuevo endpoint
/products/exists-by-skupara comprobaciones masivas previas a la sincronización. - Integrado soporte para mapeo de SKUs a IDs en
iaRecommendations, inyectando productos en el bloque de Upsells. - Mejoras en la sanitización al guardar slugs (
sanitize_title) y nombres de archivos de imagen únicos. - Refactorización de la respuesta HTTP para incluir el estado (
status) resultante del producto.
v1.5.0
- Soporte completo para actualización por lote (batch).
- Manejo seguro de imágenes destacadas y galería desde URLs externas.
- Validación de SKU duplicado.
- Creación automática de etiquetas inexistentes.
🧑💻 Autoría y Licencia
Desarrollado por: Enmanuel Nava para el backend del proyecto Gusanito Lector.
Este plugin es software libre distribuido bajo la licencia GPL-2.0-or-later.