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 - de la 1 a la 6 (de un total de 6)
  • Moderador Jose Luis

    (@jose64)

    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.

    Iniciador del debate lordmahc

    (@lordmahc)

    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.

    Iniciador del debate lordmahc

    (@lordmahc)

    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 año, 9 meses por Javier Esteban. Razón: Corrección en el código
    • Esta respuesta fue modificada hace 1 año, 9 meses por Javier Esteban. Razón: Corrección en el código
    • Esta respuesta fue modificada hace 1 año, 9 meses por Javier Esteban. Razón: Corrección en el código
    Moderador Jose Luis

    (@jose64)

    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 - de la 1 a la 6 (de un total de 6)
  • El debate ‘Oferta 2 x 1 en woocomerce’ está cerrado a nuevas respuestas.