WordPress · Cart bridge
El cart bridge mantiene al widget en sintonía con el carrito de WooCommerce. Cuando un cliente añade, quita o vacía el carrito, el plugin emite un CustomEvent('neuroon:cart-update') en window. El widget escucha ese evento y refresca sus respuestas (cross-sell, validaciones, prompts).
No tienes que hacer nada para activar el bridge: el plugin lo wirea automáticamente cuando carga el widget en la página. Cobertura medida internamente: ~95 % de las mutaciones del carrito en una WC estándar.
Eventos jQuery suscritos
var wcCartEvents = 'added_to_cart removed_from_cart updated_wc_div ' +
'updated_cart_totals wc_fragments_refreshed ' +
'wc_fragments_loaded wc_cart_emptied';
Cita: .
WooCommerce dispara varios eventos en cascada (p. ej. added_to_cart + wc_fragments_refreshed casi a la vez). Para evitar floods, el plugin aplica debounce de 200 ms:
function onWcCartEvent() {
if (wcDebounceTimer) clearTimeout(wcDebounceTimer);
wcDebounceTimer = setTimeout(function () {
window.dispatchEvent(new CustomEvent('neuroon:cart-update'));
}, 200);
}
Cita: .
Configuración del widget
El nombre del evento está expuesto vía la config inline del widget:
'externalUpdateEvent' => 'neuroon:cart-update'
Cita: .
Si necesitas cambiarlo (p. ej. para evitar colisión con otro listener), filtra la config antes de imprimirla.
Payload
El plugin emite el evento sin payload (detail ausente). El widget pide al servidor el estado actualizado del carrito a través de la API de WooCommerce vía AJAX (fragments) o consulta directamente el endpoint público de WC. Esto evita exponer datos sensibles desde scripts inline.
Si tienes un caso especial (carrito en JSON propio, headless WC, etc.), puedes emitir tu propio evento con detail:
window.dispatchEvent(new CustomEvent('neuroon:cart-update', {
detail: {
items: [
{ productId: 'PRD-001', name: 'Smart Speaker', price: 79.99, quantity: 2 }
],
total: 159.98,
currency: 'EUR'
}
}));
El widget acepta ambos modos.
Robustez frente a jQuery diferido
WooCommerce engancha sus eventos sobre jQuery(document.body). En tiendas con jQuery cargado en defer o muy tarde, el plugin reintenta el attach hasta 10 veces a intervalos de 500 ms (5 s totales). Si tras eso jQuery sigue ausente, el bridge queda inactivo y se loguea un warning en consola.
Cita: bloque
attachWcCartSyncenwordpress-plugin/neuroon-search/includes/widget/class-neuroon-widget-manager.php(líneas ~907-925).
Validar que el bridge funciona
- Abre la consola del navegador en una página con producto.
- Suscríbete:
window.addEventListener('neuroon:cart-update', e => console.log('cart-update', e));
- Pulsa Add to cart. Deberías ver el log ~200 ms después.
Si no ves el evento:
- Comprueba que jQuery está cargado (
typeof jQuery !== 'undefined'en consola). - Verifica que el widget está activo (la config inline debe imprimir el bloque
<script>conexternalUpdateEvent). - Mira la pestaña Diagnostics del plugin para ver si el bridge está marcado como attached.
Cuándo NO usar este bridge
- Headless WooCommerce / Storefront propio: tu propio frontend ya conoce el estado del carrito; emite tu propio
CustomEventdirectamente. Verrecipes/custom-cart-bridge. - Carritos completamente AJAX externos (ej. mini-cart hecho en React montado fuera de WC): igual que arriba, dispatcha tú.
Próximos pasos
- Recipe · Custom cart bridge — payload schema y ejemplos.
- Widget · Cart integration — cómo lo consume el widget.