Woocommerce: No reducir stocks en pedidos con pago Transferencia bancaria

Woocommerce: No reducir stocks en pedidos con pago Transferencia bancaria

Muchos pedidos con forma de pago “transferencia bancaria” nunca se recibe la transferencia.

Las funciones siguientes hacen que el stocks no se reduzca automáticamente en los pedidos con el método de pago “transferencia bancaria”, en cambio si se actualiza el stock cuando el pedido cambia de estatus de “en espera” a “en proceso” o “completado”.

// NO ACTUALIZAR STOCKS EN PEDIDOS POR TRANSFERENCIA BANCARIA 
function wcs_do_not_reduce_onhold_stock( $reduce_stock, $order ) {
    if ( $order->has_status( 'on-hold' ) && $order->get_payment_method() == 'bacs' ) {
        $reduce_stock = false;
    }
    return $reduce_stock;
}
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_onhold_stock', 10, 2 );


// ACTUALIZAR STOCKS EN PEDIDOS POR TRANSFERENCIA BANCARIA CUANDO ESTADO PASA A COMPLETADO
function order_stock_reduction_based_on_status( $order_id, $old_status, $new_status, $order ){
    // Only for 'processing' and 'completed' order statuses change
    if ( $new_status == 'processing' || $new_status == 'completed' ) {
    $stock_reduced = get_post_meta( $order_id, '_order_stock_reduced', true );
        if( empty($stock_reduced) && $order->get_payment_method() == 'bacs' ){
            wc_reduce_stock_levels($order_id);
        }
    }
}
add_action( 'woocommerce_order_status_changed', 'order_stock_reduction_based_on_status', 20, 4 );