Soporte » Plugins y Hacks » Oferta 2 x 1 en woocomerce

  • Hola, en mi sitio queremos poner ofertas del tipo compré dos productos de cierto tipo y llevalos por el precio de 1, me explico de otra manera si compro 2 productos el precio individual se reduce a la mitad si y sólo si son la misma referencia, me preguntó si esto se puede programar o hay algún plu gin gratuito que pueda hacerlo, de antemano gracias por su ayuda.

Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Hola @lordmahc

    Bienvenido al foro de soporte, si buscas en el repositorio plugins calificados como BOGO (Buy One – Get One) encontrarás unos cuantos, por ejemplo:

    Pricing Deals for WooCommerce

    PW WooCommerce BOGO

    Puedes comentarnos cuál te parece mejor, así tu consulta será útil a otros usuarios con el mismo problema. Recuerda cerrar el debate marcándolo como resuelto cuando lo tengas aclarado.

    Hola Jose Luis, gracias por responder, ya he revisado ambos plugins, pero para lo que busco que es ofrecer un 2 x1 en mi tienda me piden caracteristicas premium, me pregunto si hya una opción por programación o plugin que me permita hacerlo de forma simple. gracias.

    gracias Javier Esteban, sucede lo mismo con este plugin, aplica la regla de bogo a toda la tienda y solo quiero aplicarla en 2 de 5 productos, esta opción pide premium, sin embargo muy buen plugin y gracias por la ayuda, seguiré buscando opciones.

    Este snippet lo tenía guardado desde hace tiempo y no recuerdo de dónde lo saqué.
    Concretamente es para ofertas 3×2.
    Como digo, lo tengo hace mucho tiempo y no sé si seguirá funcionando correctamente.

    // SNIPPET DE OFERTA 3x2 EN UN PRODUCTO DETERMINADO
    add_filter( 'woocommerce_cart_item_subtotal', 'aplicar_oferta_3x2', 10, 3 );
    function aplicar_oferta_3x2( $subtotal, $cart_item, $cart_item_key ){
    
        $ofertaFinal = $subtotal;
        $cantidad = $cart_item[ 'quantity' ];
    
        if ( ( $cart_item[ 'product_id' ] === TU-ID-DE-PRODUCTO ) && ( $cantidad >= 3 ) ) {
            
            $precioProducto = $cart_item[ 'data' ]->get_price();
            $precioProductoImpuestoIncl = $cart_item[ 'data' ]->get_price_including_tax();
            $descuento = floor( $cantidad / 3 ) * $precioProducto;
            $descuentoImpuestoIncl = floor( $cantidad / 3 ) * $precioProductoImpuestoIncl;
    
            // CÁLCULO DE LA OFERTA CON LOS AJUSTES DE IMPUESTOS ACTIVOS
    
            if ( WC()->cart->tax_display_cart == 'excl' ) {
    
                $oferta = $cart_item[ 'data' ]->get_price_excluding_tax( $cantidad ) - $descuento;
                $ofertaFinal = wc_price( $oferta );
    
                if ( WC()->cart->prices_include_tax && WC()->cart->tax_total > 0 ) {
                    $ofertaFinal .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
                }
            } else {
    
                $oferta = $cart_item[ 'data' ]->get_price_including_tax( $cantidad ) - $descuentoImpuestoIncl;
                $ofertaFinal = wc_price( $oferta );
    
                if ( ! WC()->cart->prices_include_tax && WC()->cart->tax_total > 0 ) {
                    $ofertaFinal .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';
                }
            }
    
            // ACTUALIZACIÓN DEL SUBTOTAL DEL CARRITO
            if ( WC()->cart->tax_display_cart == 'excl' ) {
                
                WC()->cart->subtotal_ex_tax = WC()->cart->subtotal_ex_tax - $descuento;
            }else{
    
                WC()->cart->subtotal = WC()->cart->subtotal - $descuentoImpuestoIncl;
            }
    
            // ACTUALIZACIÓN DEL TOTAL DEL CARRITO
            WC()->cart->total = WC()->cart->total - $descuentoImpuestoIncl;
        }
    
        return $ofertaFinal;
    }
    
    // ACTUALIZACIÓN DE LOS IMPUESTOS DESPUÉS DE LA APLICACIÓN DE LA OFERTA
    
    add_filter( 'woocommerce_cart_tax_totals', 'actualiza_impuestos_aplicados', 10, 2 );
    function actualiza_impuestos_aplicados( $tax_totals, $cartObject ){
    
        $impuestosDesc = 0;
        foreach ( $cartObject->get_cart() as $cart_item_key => $cart_item ){
    
            if ( ( $cart_item[ 'product_id' ] === TU-ID-DE-PRODUCTO ) && ( $cart_item[ 'quantity' ] >= 3 ) ) {
    
                $impuestosDesc = ( $cart_item[ 'data' ]->get_price_including_tax() - $cart_item[ 'data' ]->get_price_excluding_tax() ) * floor( $cart_item[ 'quantity' ] / 3 );
            }
        }
    
        // APLICACIÓN DEL DESCUENTO EN EL DESGLOSE DE IMPUESTO QUE SE MUESTRA DEBAJO DEL TOTAL DEL CARRITO
        $newTaxTotal = current( $tax_totals );
        $clave = key( $tax_totals );
        $newTaxTotal->amount -= $impuestosDesc;
        $newTaxTotal->formatted_amount = wc_price( $newTaxTotal->amount );
    
        $tax_totals[ $clave ] = $newTaxTotal;
    
        return $tax_totals;
    }

    Hay que cambiar TU-ID-DE-PRODUCTO, que aparece dos veces en el código, por el ID del producto al que quieras aplicar la oferta.

    • Esta respuesta fue modificada hace 1 mes, 1 semana por Javier Esteban. Razón: Corrección en el código
    • Esta respuesta fue modificada hace 1 mes, 1 semana por Javier Esteban. Razón: Corrección en el código
    • Esta respuesta fue modificada hace 1 mes, 1 semana por Javier Esteban. Razón: Corrección en el código

    Hola @lordmahc

    Dentro del repositorio tienes esta opción que te permite hacer algo semejante:

    Discount Rules for WooCommerce

    Tienes que crear reglas de compra y aplicar descuentos porcentuales, yo lo usé para crear descuentos por docenas y funcionaba bien (siempre y cuando compraras por docenas)

Viendo 6 respuestas - 1 de 6 (de 6 total)
  • Debes estar registrado para responder a este debate.