WooCommerce / Errores
Conflicto de plugins en WooCommerce: cómo encontrar la causa
Respuesta corta
Antes de desactivar nada, parte de las evidencias: la ruta del archivo de un error o una petición que falla suelen nombrar los componentes implicados. Si no hay error, reproduce el problema en una copia de staging, cambia a un tema por defecto y desactiva plugins por mitades hasta que desaparezca: así encuentras al culpable en pocos pasos. Después arregla la interacción (prioridad de hooks, carga de scripts, un snippet de compatibilidad o una actualización) en lugar de dejar algo importante desactivado.
Síntomas
- Algo se rompió justo después de instalar o actualizar un plugin, el tema o WooCommerce.
- El checkout, el carrito o las fichas de producto se comportan de otra forma con una extensión concreta activa.
- Errores de JavaScript que mencionan el script de otro plugin, o librerías duplicadas.
- Un error fatal como
Cannot declare classoCannot redeclare function. - El problema solo aparece con algunos productos, métodos de pago o roles de usuario.
Causas más comunes
- Competencia de hooks: dos componentes enganchados al mismo filtro, donde el último sobrescribe o deshace al primero (precios, cargos, envíos, campos del checkout).
- Conflictos de JavaScript: versiones de jQuery o de librerías duplicadas, scripts cargados en el orden equivocado, optimizadores que combinan o difieren los scripts del checkout.
- Colisiones de librerías incluidas: dos plugins que traen versiones distintas de la misma librería PHP, de modo que gana la que se carga primero.
- Plantillas sobrescritas en el tema que están desactualizadas respecto a WooCommerce.
- Supuestos distintos sobre los datos: un plugin guarda valores que otro no espera, o los dos escriben la misma clave de meta.
- Restricciones de REST y AJAX: plugins de seguridad que bloquean endpoints de los que depende otra extensión.
Diagnóstico
1. Parte de las evidencias, no de la desactivación
- ¿Un error PHP? La ruta del archivo nombra el componente y la traza muestra qué hook los conecta.
- ¿Un error de JavaScript? La consola muestra el archivo del script y la línea.
- ¿Una petición que falla? El cuerpo de la respuesta en el panel de red suele contener el error o el nombre del componente que la rechazó.
- ¿Una cronología? La primera aparición suele coincidir con una actualización o una instalación.
2. Reprodúcelo en staging
Copia la tienda a staging y confirma que el problema también ocurre allí. Si no ocurre, la causa es del entorno (caché, CDN, configuración del servidor), no de un plugin.
3. Aísla por mitades
Cambia a un tema por defecto (como Storefront) y prueba. Si el problema sigue, desactiva la mitad de los plugins (manteniendo WooCommerce y lo que necesite la prueba, como la pasarela de pago), vuelve a probar y sigue dividiendo por la mitad el grupo que contiene el problema.
| Plugins activos | Pruebas necesarias, dividiendo cada vez |
|---|---|
| 16 | unas 4 |
| 32 | unas 5 |
| 64 | unas 6 |
4. Confirma la pareja
Cuando tengas un sospechoso, prueba WooCommerce solo con ese plugin, y después con ese plugin y con el que más probablemente interactúa. Un conflicto queda confirmado cuando puedes reproducirlo con el conjunto más pequeño posible.
Registros y comprobaciones técnicas
- WooCommerce → Estado → Registros (
fatal-errors) y el log de errores PHP. - WooCommerce → Estado → Estado del sistema: plugins activos y versiones, plantillas sobrescritas desactualizadas.
- Consola del navegador y panel de red en la página afectada.
- Los changelogs de los plugins actualizados alrededor de la primera aparición.
Soluciones
- Actualiza los dos componentes; muchos conflictos ya están arreglados en una versión posterior.
- Ajusta la prioridad de los hooks en un pequeño mu-plugin de compatibilidad, para que la lógica que quieres se ejecute la última.
- Impide que los scripts se carguen donde no hacen falta, y excluye los scripts del checkout de la combinación y el diferido.
- Actualiza o elimina las plantillas sobrescritas desactualizadas del tema.
- Envía un caso reproducible a los desarrolladores: versiones, pasos y el conjunto mínimo de plugins activos.
- Sustituye un plugin abandonado en lugar de parchearlo para siempre.
// Asegura que nuestra lógica de cargos se ejecuta después de otro plugin que los reinicia con prioridad 20.
add_action( 'plugins_loaded', function () {
remove_action( 'woocommerce_cart_calculate_fees', 'mystore_apply_fees', 10 );
add_action( 'woocommerce_cart_calculate_fees', 'mystore_apply_fees', 30 );
}, 20 );Qué no hacer
- No desactives plugins uno a uno en la tienda en producción: es lento, rompe otros flujos para los clientes y puedes desactivar algo que procesa pagos.
- No edites los archivos del plugin en conflicto; el cambio desaparece con la siguiente actualización.
- No dejes un plugin importante desactivado «de momento» sin entender qué estaba haciendo.
- No des por hecho que el culpable es el último plugin actualizado sin probarlo.
Cuándo recurrir a un experto
Recurre a un ingeniero cuando el conflicto implica código a medida o extensiones premium de las que dependes, cuando solo aparece en producción con tráfico real, cuando corrompe datos como precios o pedidos, o cuando necesitas que los dos componentes sigan funcionando.
Problemas relacionados
- WooCommerce / Errores Error fatal en WooCommerce: guía práctica para resolverlo Lee bien el error fatal (archivo, línea, traza) y relaciónalo con el cambio que lo provocó.
- WooCommerce / Checkout El checkout de WooCommerce no funciona: cómo diagnosticar la causa raíz Determina primero si el fallo ocurre antes de la petición del checkout, durante ella o después de la respuesta de la pasarela. El panel de red y los registros PHP suelen revelar qué capa falla.
- WooCommerce / Rendimiento Checkout lento en WooCommerce: qué revisar Separa el tiempo de PHP, las consultas a la base de datos y las llamadas a APIs externas antes de cambiar la caché o el hosting.
Preguntas frecuentes
¿Cómo encuentro qué plugin entra en conflicto con WooCommerce?
Revisa primero los registros de errores; la ruta del archivo suele nombrar al plugin. Si no hay error, reproduce el problema en staging y desactiva plugins por mitades, probando cada vez, hasta encontrar aquel cuya desactivación lo arregla. Después pruébalo solo con WooCommerce para confirmarlo.
¿Puedo buscar conflictos en una tienda en producción?
No desactivando plugins para todo el sitio. El modo de resolución de problemas del plugin Health Check & Troubleshooting desactiva plugins y cambia el tema solo para tu sesión, lo que es mucho más seguro; aun así, una copia de staging sigue siendo el mejor lugar.
¿Siempre es un plugin?
No. El tema, un snippet en functions.php, un mu-plugin, la caché del servidor o la optimización de scripts de una CDN pueden comportarse como un conflicto de plugins.
¿Y si necesito los dos plugins?
Entonces el objetivo es arreglar la interacción: cambiar la prioridad de un hook, impedir que un script se cargue en ciertas páginas, añadir un pequeño snippet de compatibilidad o enviar un caso reproducible a los desarrolladores.