Cómo ofrecer descuentos en función de la cantidad en WooCommerce

Publicado: 2020-01-27

Por lo general, como propietario de una tienda, a veces puede querer ofrecer descuentos si los clientes compran más de una cantidad de un producto en particular. Esto puede ser para aumentar las ventas o terminar con el exceso de existencias. En esta publicación, aprenderá cómo ofrecer descuentos en función de la cantidad en WooCommerce utilizando fragmentos de código y complementos.

Cómo ofrecer descuentos basados ​​en cantidad en WooCommerce usando Code Snippets

Exploremos cómo usar un fragmento de código para hacer esto. Con este fragmento de código, ofrecemos a los clientes un descuento del 5 % si compran más de 2 cantidades del mismo producto.

Para hacer esto, deberá agregar el siguiente código al archivo functions.php de su tema secundario:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3);

función ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){

    $id_producto = $id_variación > 0 ? $variation_id : $product_id;

    ## ----- ESTABLECE EL DESCUENTO AQUÍ ----- ##
    $descuento_porcentaje = 5; // Descuento (5%)

    // El Objeto WC_Producto
    $producto = wc_get_product($product_id);

    $precio = (float) $producto->get_price();

    // Establecer el precio base predeterminado del producto como datos de artículos de carrito personalizados
    $cart_item_data['base_price'] = $precio;

    // Establecer el precio con descuento del producto como datos de artículo de carrito personalizado
    $cart_item_data['new_price'] = $precio * (100 - $descuento_porcentaje) / 100;

    // Establecer el porcentaje como datos de artículos de carrito personalizados
    $cart_item_data['porcentaje'] = $descuento_porcentaje;

    devolver $cart_item_data;
}

// Mostrar el precio original del producto
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3);

función ts_display_cart_items_default_price ($product_price, $cart_item, $cart_item_key){
    if( isset($cart_item['base_price']) ) {
        $producto = $cart_item['datos'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) ) );
    }
    devuelve $producto_precio;
}

// Mostrar el nombre del producto con el porcentaje de descuento
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3);
función ts_add_percentage_to_item_name ($ nombre_producto, $ artículo_carrito, $ clave_artículo_carro) {
    if( isset($cart_item['porcentaje']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['porcentaje'] . '% descuento)</em>';
    }
    devuelve $nombre_del_producto;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
función ts_custom_discounted_cart_item_price ($ carrito) {
    if ( es_admin() && ! definido( 'HACER_AJAX' ) )
        devolver;

    if (hizo_acción('woocommerce_before_calculate_totals') >= 2)
        devolver;

    ## ----- ESTABLECE LA CANTIDAD AQUÍ ----- ##
    $cantidad_destinada = 2; // Cantidad objetivo

    // Recorrer los artículos del carrito
    foreach ( $carrito->get_cart() as $carrito_elemento ) {

        // Para cantidad de artículos de 2 o más
        if( $cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Establecer el precio con descuento del artículo del carrito
            $cart_item['datos']->set_price($cart_item['new_price']);
        }
    }
}

El código anterior agregará un descuento del 5 % si la cantidad del producto es superior a 2. Puede cambiar esto para adaptarlo a sus requisitos cambiando la variable $discount_percentage para establecer el descuento deseado y $targeted_qty para establecer la cantidad por encima de la cual desea aplicar el descuento.

offer discounts based on quantity in WooCommerce - Updated Cart contents

Ahora podrá ver un precio con descuento si agrega 2 o más cantidades del mismo producto en su carrito.

Hemos utilizado cuatro ganchos principales en el código anterior:

woocommerce_add_cart_item_data: este enlace de filtro se usa para cambiar el contenido / metadatos del carrito.
woocommerce_cart_item_price: este enlace de filtro se usa para cambiar la forma en que se muestran los precios en el carrito.
woocommerce_cart_item_name: este enlace de filtro se puede usar para cambiar el nombre del producto en el carrito. En nuestro ejemplo, lo usamos para agregar el porcentaje de descuento al nombre del producto.
woocommerce_before_calculate_totals: este gancho de acción se usa para anular el precio del producto en el carrito.

Cómo ofrecer descuentos basados ​​en cantidad solo para artículos que NO están en oferta:

Si desea restringir esto solo a aquellos productos que no están a la venta, simplemente debe editar el fragmento de código anterior para agregar una condición dentro de la función que se agrega al enlace woocommerce_add_cart_item_data:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3);
función ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){
    $id_producto = $id_variación > 0 ? $variation_id : $product_id;

    ## ----- ESTABLECE EL DESCUENTO AQUÍ ----- ##
    $descuento_porcentaje = 5; // Descuento (5%)

    // El Objeto WC_Producto
    $producto = wc_get_product($product_id);

    // AGREGAR CONDICIÓN AQUÍ para ofrecer DESCUENTO SOLO para productos NO en oferta
    if( ! $producto->está_en_oferta() ){
        $precio = (float) $producto->get_price();

        // Establecer el precio base predeterminado del producto como datos de artículos de carrito personalizados
        $cart_item_data['base_price'] = $precio;

        // Establecer el precio con descuento del producto como datos de artículo de carrito personalizado
        $cart_item_data['new_price'] = $precio * (100 - $descuento_porcentaje) / 100;

        // Establecer el porcentaje como datos de artículos de carrito personalizados
        $cart_item_data['porcentaje'] = $descuento_porcentaje;
    }

    devolver $cart_item_data;
}

// Mostrar el precio original del producto
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3);
función ts_display_cart_items_default_price ($product_price, $cart_item, $cart_item_key){
    if( isset($cart_item['base_price']) ) {
        $producto = $cart_item['datos'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) ) );
    }
    devuelve $producto_precio;
}

// Mostrar el nombre del producto con el porcentaje de descuento
add_filter('woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3);
función ts_add_percentage_to_item_name ($ nombre_producto, $ artículo_carrito, $ clave_artículo_carro) {
    if( isset($cart_item['porcentaje']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'] )
            $product_name .= ' <em>(' . $cart_item['porcentaje'] . '% descuento)</em>';
    }
    devuelve $nombre_del_producto;
}

add_action('woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1);
función ts_custom_discounted_cart_item_price ($ carrito) {
    if ( es_admin() && ! definido( 'HACER_AJAX' ) )
        devolver;

    if (hizo_acción('woocommerce_before_calculate_totals') >= 2)
        devolver;

    ## ----- ESTABLECE LA CANTIDAD AQUÍ ----- ##
    $cantidad_destinada = 2; // Cantidad objetivo

    // Recorrer los artículos del carrito
    foreach ( $carrito->get_cart() as $carrito_elemento ) {

        // Para cantidad de artículos de 2 o más
        if( $cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Establecer el precio con descuento del artículo del carrito
            $cart_item['datos']->set_price($cart_item['new_price']);
        }
    }
} 

De esta manera, puede ofrecer descuentos basados ​​en la cantidad usando fragmentos de código para productos que no están en venta, en venta o todos, es decir, en toda la tienda, indicando la condición adecuada dentro de la función que se agrega al gancho de filtro woocommerce_add_cart_item_data .

Cómo ofrecer descuentos en función de la cantidad en WooCommerce usando complementos

Si no se siente cómodo agregando un fragmento de código a los archivos de su sitio web, también puede usar complementos para hacer esto:

  1. Reglas de descuento para WooCommerce : este es un complemento gratuito que le permite agregar descuentos porcentuales no solo en función de la cantidad de productos, sino también si sus clientes superan un límite de precio determinado. También puede agregar descuentos porcentuales en una cierta cantidad de artículos (no necesariamente del mismo producto). La versión PRO de este complemento le permite agregar descuentos en toda la categoría, ofertas BOGO (Compre uno y llévese otro gratis), un descuento de precio fijo en lugar de un porcentaje de descuento y más.
  2. Descuentos condicionales para WooCommerce: este es otro complemento que ofrece casi todas las funciones importantes en su versión gratuita : puede agregar descuentos según la cantidad, la cantidad de artículos del carrito, para categorías específicas, en productos específicos, en características variables (camisa azul, talla mediana etc.), para ciertos roles de tienda o incluso clientes específicos. Su versión PRO tiene algunas características adicionales, una de ellas es agregar un producto sin costo al carrito con la compra de un determinado producto.
  3. Cupones inteligentes: además de las tarjetas de regalo, los créditos de la tienda, los cupones de URL y las restricciones avanzadas, también puede restringir un cupón según la cantidad de productos específicos en el carrito (por ejemplo, 10 camisetas) y también la cantidad total de productos de varios productos en el carrito. carro (ejemplo – 5 camisas + 2 pantalones + 3 cinturones).

De esta forma, puede utilizar fragmentos de código o complementos para ofrecer descuentos a sus clientes en función de la cantidad de productos.