Saltar al contenido principal

WordPress · Sincronización de productos

El plugin sincroniza tu catálogo WooCommerce con Neuroon mediante el endpoint:

POST/api/plugin/shops/{shopId}/products/sync

La sync es idempotente por externalId (típicamente el ID del producto en WP). Reenviar el mismo producto actualiza, no duplica.

Modos de sincronización

ModoCuándo usarloComportamiento
FULLPrimera carga o re-bootstrapMarca como ausentes los productos que no estén en el batch acumulado.
INCREMENTALDía a día (autosync, deltas)Solo crea / actualiza los productos enviados; el resto queda intacto.

El plugin usa INCREMENTAL por defecto. Solo dispara FULL cuando lanzas Reset & Resync All desde la pestaña Products.

Tamaño de batch

CapaLímite
Plugin (cliente)50 productos por defecto (Neuroon_Constants::DEFAULT_BATCH_SIZE = 50), configurable entre MIN_BATCH_SIZE = 10 y MAX_BATCH_SIZE = 500 mediante la opción neuroon_batch_size
Backend (servidor)hasta 500 productos por petición

Cita: constantes en wordpress-plugin/neuroon-search/includes/class-neuroon-constants.php (líneas 42–48).

El plugin envía en lotes pequeños a propósito: limita el footprint de memoria PHP, evita timeouts típicos de PHP-FPM (max_execution_time) y absorbe mejor los rate limits. Si tu hosting aguanta más, sube la opción neuroon_batch_size desde la pestaña Products → Settings.

Auto-sync vía hooks WooCommerce

El plugin engancha los siguientes eventos de WooCommerce y mueve el producto correspondiente a estado PENDING en su tabla local wp_neuroon_product_sync:

add_action('woocommerce_update_product', array(__CLASS__, 'on_product_updated'));
add_action('woocommerce_new_product', array(__CLASS__, 'on_product_created'));
add_action('woocommerce_product_set_stock', array(__CLASS__, 'on_stock_changed'));
add_action('before_delete_post', array(__CLASS__, 'on_product_deleted'));

Cita: hooks listados en wordpress-plugin/CLAUDE.md y registrados en wordpress-plugin/neuroon-search/includes/product-sync-hooks.php.

Comportamiento:

  • Producto editado → si estaba SYNCED, vuelve a PENDING.
  • Producto creado → queda PENDING (selección manual o autosync, según ajustes).
  • Cambio de stock (woocommerce_product_set_stock) → re-sync.
  • Producto eliminado (before_delete_post) → se borra de la tabla local; un job posterior emitirá DELETE /api/plugin/shops/{shopId}/products/{externalId}.

Tabla local de tracking

Custom table: {prefix}_neuroon_product_sync.

CREATE TABLE wp_neuroon_product_sync (
product_id BIGINT(20) UNSIGNED NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
last_synced_at DATETIME NULL,
last_modified_at DATETIME NOT NULL,
error_message TEXT NULL,
sync_attempts INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (product_id),
KEY status (status),
KEY last_modified_at (last_modified_at)
);

Cita: esquema en wordpress-plugin/CLAUDE.md (sección Database Schema).

Estados:

StatusSignificado
PENDINGEn cola, aún no enviado.
PROCESSINGEnviado, esperando respuesta.
SYNCEDAceptado por el backend (200/201).
FAILEDBackend devolvió error; ver error_message.
NOT_SYNCEDProducto excluido por reglas locales (ej. borrador).

Respuesta del endpoint

Cada llamada /products/sync devuelve un JSON con el agregado de ese batch:

{
"totalReceived": 100,
"newProducts": 50,
"updatedProducts": 47,
"skipped": 0,
"failed": 3,
"errors": [
{ "externalId": "123", "error": "Invalid price" }
],
"productsCount": 150,
"remainingProducts": 850
}

productsCount y remainingProducts reflejan tu cuota global tras el batch. El plugin muestra esos valores en la pestaña Products y bloquea nuevos batches si remainingProducts == 0.

Latencia (eventual consistency)

Tras el 200 OK, los productos pasan por el pipeline interno . La indexación tarda 2 a 5 segundos. Hasta que termina, una búsqueda inmediata puede no devolverlos.

Rate limits

EndpointLímite
products/sync100/min
shops/me60/min
verification-data20/min

Cita: matriz de rate limits resumida en el brief y aplicada por Neuroon_Rate_Limit_Handler.

El plugin captura 429 y respeta el Retry-After. Si tu tienda tiene > 6.000 productos y necesitas un bootstrap rápido, contacta a soporte para ampliar la ventana.

Cuotas

El plan asociado a tu API Key define maxProducts. La pestaña Products lee productsCount / maxProducts desde GET /api/plugin/shops/me (cache 5 min en transient neuroon_shop_info_{md5(api_key)}).

Sync manual desde la UI

  1. wp-admin → Settings → Neuroon Search → Products tab.
  2. Selecciona productos (DataTables 1.13.6 server-side).
  3. Pulsa Sync selected. La UI dispara wp_ajax_neuroon_start_sync y luego pollea wp_ajax_neuroon_sync_status.
  4. Cada batch (100) se envía secuencialmente con usleep(100000) (100 ms) entre lotes para no saturar.

Resync forzada

Products tab → Reset & Resync All marca todos los productos como PENDING y dispara una sync FULL. Útil si:

  • Sospechas que la tabla local está desincronizada respecto a Neuroon.
  • Has cambiado masivamente atributos / categorías.
  • Acabas de migrar de plan y necesitas re-validar la cuota.

Próximos pasos