No restar el stock de un pedido realizado por transferencia bancaria hasta que se realice el pago

LucusHost, el mejor hosting

Imagina que un cliente realiza un pedido en tu tienda online con transferencia bancaria. Automáticamente WooCommerce descuenta ese stock, aunque todavía no hayas recibido el dinero.

¿El problema? Ese producto queda reservado sin garantías de cobro. Y si el cliente nunca llega a pagar, te encontrarás con un stock bloqueado que podrías haber vendido a otro comprador realmente interesado.

La solución es sencilla: configurar WooCommerce para que solo reste inventario cuando el pedido pase a “Procesando” o “Completado”, es decir, una vez confirmado el pago. Avisando al cliente que si paga por este medio de pago no se le reserva el producto hasta que compre.

En este tutorial te muestro cómo hacerlo con un pequeño fragmento de código que podrás añadir en tu tema hijo o en un plugin de funcionalidades personalizadas.

Cuándo y por qué usar esta funcionalidad

Hay varios escenarios en los que es recomendable no reducir stock hasta que el pago por transferencia esté verificado:

  • Tiendas con alta rotación de stock: Si vendes productos muy demandados, no puedes permitir que se “bloqueen” unidades por pedidos sin pagar.
  • Productos de stock limitado: En artículos exclusivos o de pocas unidades, un simple pedido no abonado podría impedir otra venta real.
  • Negocios con muchos pedidos internacionales: Las transferencias pueden tardar varios días en reflejarse, y hasta entonces no conviene reservar unidades.
  • Evitar gestiones manuales: Sin este ajuste, tendrías que estar pendiente de liberar stock manualmente en pedidos cancelados o caducados.

    En definitiva, esta funcionalidad asegura que tu inventario refleje solo las ventas confirmadas, evitando bloqueos innecesarios y mejorando la experiencia de los clientes que realmente pagan.

    Implementación en WooCommerce

    Añade este fragmento para que cualquier pedido hecho con transferencia bancaria no se descuente del stock hasta que pase a procesando o completado. Si tienes otros estados de pedidos tienes que añadir los identificadores de estos al código. Añádelo al fichero functions.php de tu child theme o bien a tu plugin de funcionalidades como explico aquí.

    add_filter( 'woocommerce_can_reduce_order_stock', 'personalizar_reduccion_stock_transferencia', 10, 2 );
    
    function personalizar_reduccion_stock_transferencia( $can_reduce, $order ) {
        if ( ! is_a( $order, 'WC_Order' ) ) {
            return $can_reduce;
        }
    
        // Obtener método de pago del pedido
        $payment_method = $order->get_payment_method();
        $order_status   = $order->get_status();
    
        // Si el método es transferencia bancaria y el estado NO es procesando o completado, NO reducir stock
        if ( $payment_method === 'bacs' && ! in_array( $order_status, array( 'processing', 'completed' ) ) ) {
            return false;
        }
    
        return $can_reduce;
    }
    

    Por otro lado si quieres aprender más sobre las transferencias bancarias en WooCommerce, te dejo este tutorial.

    ¡Haz clic para puntuar esta entrada!
    (Votos: 0 Promedio: 0)

    Especialista en Comercio electrónico con Woocommerce. Te ayudo a crear, gestionar y publicitar tu Ecommerce en función de tu sector y público objetivo. Puedes encontrarme en Diegol.top

    ¿Necesitas ayuda con este tutorial? Mándame un correo y te resuelvo todas las dudas!


    Ver servicios Curso de WooCommerce

    También puedes realizar una donacion para seguir apoyando la salida de nuevos tutoriales y actualizaciones

    Reader Interactions

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *