Qué conviene comprobar primero: WooCommerce registra si el stock ya se ha reducido, pero el código personalizado, las importaciones, los webhooks duplicados o los cambios manuales de estado pueden saltarse o reiniciar esa protección.
Qué significa realmente que el stock se descuente dos veces
Una doble reducción no siempre es un problema de WooCommerce core. Lo importante es reconstruir quién escribió cada cambio de inventario y con qué evento estaba relacionado.
Reconstruye cada ajuste de inventario
- Captura los ID de los pedidos afectados, las líneas de producto y el historial de stock.
- Revisa
_order_stock_reducedy todas las transiciones de estado del pedido. - Comprueba reintentos de webhooks, importaciones y hooks personalizados de inventario.
- Compara los movimientos de WooCommerce con los registros del ERP o del almacén.
De dónde suele salir la segunda reducción
- Callback duplicado: el mismo evento de pago ejecuta más de una vez el código que reduce el stock.
- Hook personalizado: un plugin reduce el stock además de la lógica propia de WooCommerce.
- Cambios de estado repetidos: el pedido entra y sale varias veces de estados que pueden afectar al inventario.
- Bucle de sincronización externo: WooCommerce y el ERP replican cada uno el ajuste realizado por el otro.
Haz idempotentes las escrituras de inventario
- Identifica una única ruta autorizada para modificar el inventario.
- Añade idempotencia por evento y pedido a los procesos personalizados o externos.
- Corrige cantidades históricas solo después de conciliar cada transacción afectada.
- Prueba pago, cancelación, reembolso y repetición del webhook.
¿Evento duplicado o segundo gestor de stock?
Un callback duplicado deja rastro de eventos repetidos; un hook de un plugin puede volver a reducir el stock aunque el pago aparezca una sola vez. Compara notas del pedido, _order_stock_reduced, identificadores de webhook y el registro del ERP o almacén antes de tocar nada. La reparación pasa por hacer idempotente la entrada del evento o eliminar el segundo proceso que escribe inventario.
Si el segundo movimiento de inventario empieza con eventos comerciales duplicados, compara el rastro con pedidos duplicados en WooCommerce y con pagos duplicados por reintentos. Si ninguno se reproduce, céntrate en hooks de stock o en la sincronización con el ERP, no en el checkout.
Por qué reiniciar flags de stock puede empeorarlo
No reinicies _order_stock_reduced a ciegas. Ese indicador evita reducciones repetidas de WooCommerce y modificarlo puede provocar otro ajuste justo mientras intentas corregir el anterior.
Reproduce todo el ciclo de vida del pedido
- Cada pedido afecta al stock exactamente una vez según la política definida.
- La repetición de un webhook o un cambio de estado no duplica movimientos de inventario.
- El registro de stock de WooCommerce cuadra con el ERP o el sistema de almacén.
Cierra la incidencia solo cuando un pago normal, la repetición de un webhook, un cambio de estado y un reembolso dejen cada uno un único ajuste de inventario auditable y WooCommerce siga conciliando con el ERP o el registro de almacén.