WooCommerce / Checkout
Problemas con el checkout de WooCommerce
Para el cliente, todos los fallos del checkout se parecen (un spinner, un error, nada), pero las causas van desde un error de JavaScript hasta un error fatal de PHP o una respuesta de la pasarela de pago. La forma más rápida de llegar a la causa es averiguar qué capa falla primero.
Respuesta corta
Abre el panel de red del navegador y haz un pedido de prueba. Si no se envía ninguna petición del checkout, el problema es JavaScript. Si la petición (?wc-ajax=checkout, o la Store API en el bloque de Checkout) devuelve un error, lee los registros de PHP y de WooCommerce. Si el pedido se crea pero el pago falla, el problema está en el traspaso a la pasarela.
Recursos técnicos
Guías sobre el checkout
Problemas concretos
Fallos de checkout habituales
El checkout no funciona en absoluto
Ningún cliente puede completar un pedido.
El checkout no deja de cargar
La petición ha fallado, ha superado el tiempo o ha devuelto algo que la página no entiende.
Falla al pulsar Realizar pedido
Un error PHP, una validación fallida o un rechazo de la pasarela al crear el pedido.
Funciona con sesión, falla con invitados
Páginas de checkout en caché, nonces caducados, ajustes de cuentas y de invitados.
Se rompió tras actualizar un plugin
Un hook modificado, una dependencia de JavaScript o una plantilla eliminada.
Checkout lento
Tiempo perdido en PHP, la base de datos o llamadas a APIs externas.
Primero, encuentra la capa que falla
| Qué ves en el panel de red | Qué significa | Dónde mirar después |
|---|---|---|
| Ninguna petición al pulsar Realizar pedido | El navegador no la envió | Errores de consola, scripts bloqueados o diferidos |
| La petición devuelve 500 | PHP falló en el servidor | Registro fatal-errors, log de errores PHP |
| La petición devuelve 403 | Algo la bloqueó | Plugin de seguridad, reglas de WAF o CDN, restricciones de la REST API |
| 200 con un mensaje de error | WooCommerce rechazó el pedido | Validación, campos, cupones, respuesta de la pasarela |
| 200, pedido creado, el pago falla | Traspaso a la pasarela | Registro de la pasarela, eventos del proveedor |
Checkout clásico y bloque de Checkout
El checkout clásico (shortcode [woocommerce_checkout]) envía el pedido a ?wc-ajax=checkout. El bloque de Checkout (el predeterminado en las tiendas nuevas) crea los pedidos mediante la Store API bajo /wp-json/wc/store/v1/. Fallan en sitios distintos: una regla que bloquea la REST API solo rompe el bloque, y una extensión pensada solo para el checkout clásico puede no hacer nada en el bloque sin avisar.
Qué no hacer
- No desactives plugins uno a uno en la tienda en producción en horario comercial: puede romper otros flujos y perder pedidos en curso.
- No cachees las páginas de checkout, carrito o cuenta, ni minifiques o difieras los scripts del checkout sin probar un pedido completo.
- No edites archivos del núcleo de WooCommerce ni copies plantillas del núcleo para «arreglar» el checkout. El arreglo se perderá con la próxima actualización.
Preguntas frecuentes
¿Por qué el checkout de WooCommerce no deja de cargar?
Normalmente porque la petición del checkout falló o devolvió algo que la página no pudo leer: un error fatal de PHP, un aviso de PHP impreso en la respuesta, un timeout o una petición bloqueada por una regla de seguridad. La respuesta de la petición en el panel de red indica cuál.
¿Por qué el checkout funciona con sesión iniciada pero no para invitados?
A menudo porque la página de checkout o de carrito se sirve desde una caché de páginas a visitantes sin sesión, con un nonce de seguridad caducado. Las páginas de checkout, carrito y cuenta deben quedar fuera de la caché.
¿Puede una actualización de un plugin romper el checkout?
Sí. Una actualización puede cambiar un hook, la prioridad de un filtro o una dependencia de JavaScript en la que se apoya otra extensión, el tema o el código a medida.
$ describe el problema
¿Tienes un problema con WooCommerce?Solicita un diagnóstico.
Cuéntanos qué falla, qué ha cambiado últimamente y cómo afecta al negocio. Revisamos cada solicitud y te recomendamos el siguiente paso.
Nunca envíes contraseñas, claves API ni datos de tarjetas a través del formulario.