Como oferecer descontos com base na quantidade no WooCommerce

Publicados: 2020-01-27

Normalmente, como proprietário de uma loja, às vezes você pode querer oferecer descontos se os clientes comprarem mais de uma quantidade de um determinado produto. Isso pode ser para aumentar as vendas ou acabar com os estoques em excesso. Neste post, você aprenderá como oferecer descontos com base na quantidade no WooCommerce usando snippets de código e plugins.

Como oferecer descontos com base na quantidade no WooCommerce usando Code Snippets

Vamos explorar como usar um snippet de código para fazer isso. Com este trecho de código, oferecemos aos clientes um desconto de 5% na compra de mais de 2 quantidades do mesmo produto.

Para fazer isso, você precisará adicionar o código abaixo ao arquivo functions.php do seu tema filho:

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

function ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){

    $product_id = $variation_id > 0 ? $variation_id : $product_id;

    ## ----- DEFINIR O DESCONTO AQUI ----- ##
    $desconto_percentagem = 5; // Desconto (5%)

    // O objeto WC_Product
    $produto = wc_get_product($product_id);

    $price = (float) $product->get_price();

    // Definir o preço base padrão do produto como dados de item de carrinho personalizado
    $cart_item_data['base_price'] = $price;

    // Defina o preço com desconto do produto como dados de item de carrinho personalizado
    $cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;

    // Defina a porcentagem como dados de item de carrinho personalizado
    $cart_item_data['percentage'] = $discount_percentage;

    return $cart_item_data;
}

// Mostra o preço original do produto
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3 );

function ts_display_cart_items_default_price( $product_price, $cart_item, $cart_item_key ){
    if( isset($cart_item['base_price']) ) {
        $produto = $cart_item['data'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) );
    }
    retornar $product_price;
}

// Exibe o nome do produto com a porcentagem de desconto
add_filter( 'woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3 );
function ts_add_percentage_to_item_name( $product_name, $cart_item, $cart_item_key ){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'])
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% de desconto)</em>';
    }
    retornar $product_name;
}

add_action( 'woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1 );
function ts_custom_discounted_cart_item_price($cart) {
    if ( is_admin() && !defined( 'DOING_AJAX' ) )
        Retorna;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        Retorna;

    ## ----- DEFINIR AQUI A QUANTIDADE ----- ##
    $targeted_qty = 2; // Quantidade desejada

    // Percorre os itens do carrinho
    foreach ( $cart->get_cart() as $cart_item ) {

        // Para quantidade de itens de 2 ou mais
        if( $cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Define o preço com desconto do item do carrinho
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
}

O código acima adicionará um desconto de 5% se a quantidade do produto for superior a 2. Você pode alterar isso para atender às suas necessidades alterando a variável $discount_percentage para definir o desconto desejado e a $targeted_qty para definir a quantidade acima da qual deseja aplicar o desconto.

offer discounts based on quantity in WooCommerce - Updated Cart contents

Agora você poderá ver um preço com desconto se adicionar 2 ou mais quantidades do mesmo produto ao seu carrinho.

Usamos quatro ganchos principais no código acima:

woocommerce_add_cart_item_data : Este gancho de filtro é usado para alterar o conteúdo / metadados do carrinho.
woocommerce_cart_item_price : Este gancho de filtro é usado para alterar a forma como os preços são exibidos no carrinho.
woocommerce_cart_item_name : Este gancho de filtro pode ser usado para alterar o nome do produto no carrinho. Em nosso exemplo, estamos usando-o para anexar a porcentagem de desconto ao nome do produto.
woocommerce_before_calculate_totals : Este gancho de ação é usado para substituir o preço do produto no carrinho.

Como oferecer descontos com base na quantidade apenas para itens que NÃO estão em promoção:

Se você quiser restringir isso apenas aos produtos que não estão à venda, basta editar o trecho de código acima para adicionar uma condição dentro da função que é adicionada ao gancho woocommerce_add_cart_item_data:

 add_filter('woocommerce_add_cart_item_data', 'ts_add_default_price_as_custom', 20, 3 );
function ts_add_default_price_as_custom( $cart_item_data, $product_id, $variation_id ){
    $product_id = $variation_id > 0 ? $variation_id : $product_id;

    ## ----- DEFINIR O DESCONTO AQUI ----- ##
    $desconto_percentagem = 5; // Desconto (5%)

    // O objeto WC_Product
    $produto = wc_get_product($product_id);

    // ADICIONE A CONDIÇÃO AQUI para oferecer DESCONTO APENAS para produtos que não estão à venda
    if( ! $product->is_on_sale() ){
        $price = (float) $product->get_price();

        // Definir o preço base padrão do produto como dados de item de carrinho personalizado
        $cart_item_data['base_price'] = $price;

        // Defina o preço com desconto do produto como dados de item de carrinho personalizado
        $cart_item_data['new_price'] = $price * (100 - $discount_percentage) / 100;

        // Defina a porcentagem como dados de item de carrinho personalizado
        $cart_item_data['percentage'] = $discount_percentage;
    }

    return $cart_item_data;
}

// Mostra o preço original do produto
add_filter('woocommerce_cart_item_price', 'ts_display_cart_items_default_price', 20, 3 );
function ts_display_cart_items_default_price( $product_price, $cart_item, $cart_item_key ){
    if( isset($cart_item['base_price']) ) {
        $produto = $cart_item['data'];
        $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $cart_item['base_price'] ) );
    }
    retornar $product_price;
}

// Exibe o nome do produto com a porcentagem de desconto
add_filter( 'woocommerce_cart_item_name', 'ts_add_percentage_to_item_name', 20, 3 );
function ts_add_percentage_to_item_name( $product_name, $cart_item, $cart_item_key ){
    if( isset($cart_item['percentage']) && isset($cart_item['base_price']) ) {
        if( $cart_item['data']->get_price() != $cart_item['base_price'])
            $product_name .= ' <em>(' . $cart_item['percentage'] . '% de desconto)</em>';
    }
    retornar $product_name;
}

add_action( 'woocommerce_before_calculate_totals', 'ts_custom_discounted_cart_item_price', 20, 1 );
function ts_custom_discounted_cart_item_price($cart) {
    if ( is_admin() && !defined( 'DOING_AJAX' ) )
        Retorna;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        Retorna;

    ## ----- DEFINIR AQUI A QUANTIDADE ----- ##
    $targeted_qty = 2; // Quantidade desejada

    // Percorre os itens do carrinho
    foreach ( $cart->get_cart() as $cart_item ) {

        // Para quantidade de itens de 2 ou mais
        if( $cart_item['quantity'] >= $targeted_qty && isset($cart_item['new_price']) ){

            // Define o preço com desconto do item do carrinho
            $cart_item['data']->set_price($cart_item['new_price']);
        }
    }
} 

Dessa forma, você pode oferecer descontos com base na quantidade usando trechos de código para não venda, venda ou todos os produtos, ou seja, em toda a loja, informando a condição apropriada dentro da função que é adicionada ao gancho de filtro woocommerce_add_cart_item_data .

Como oferecer descontos com base na quantidade no WooCommerce usando Plugins

Se você não se sentir confortável em adicionar um snippet de código aos arquivos do seu site, você também pode usar plugins para fazer isso:

  1. Regras de desconto para WooCommerce : Este é um plugin gratuito que permite adicionar descontos percentuais não apenas com base nas quantidades de produtos, mas também se seus clientes excederem um determinado limite de preço. Você também pode adicionar descontos percentuais em um determinado número de itens (não necessariamente do mesmo produto). A versão PRO deste plugin permite que você adicione descontos em toda a categoria, ofertas BOGO (Compre um e ganhe um grátis), um desconto de preço fixo em vez de um desconto percentual e muito mais.
  2. Descontos condicionais para WooCommerce: Este é outro plugin que oferece quase todos os recursos importantes em sua versão gratuita - Você pode adicionar descontos com base na quantidade, número de itens do carrinho, para categorias específicas, em produtos específicos, em recursos variáveis ​​(camisa azul, tamanho Médio etc.), para determinadas funções da loja ou mesmo clientes específicos. Sua versão PRO possui alguns recursos adicionais, sendo um deles adicionar um produto sem custo ao carrinho na compra de um determinado produto.
  3. Cupons inteligentes: Além de cartões-presente, créditos de loja, cupons de URL e restrições avançadas, você também pode restringir um cupom com base no número de produtos específicos no carrinho (exemplo – 10 camisetas) e também na quantidade total de produtos de vários produtos no carrinho (exemplo – 5 camisas + 2 calças + 3 cintos).

Dessa forma, você pode usar trechos de código ou plugins para oferecer descontos aos seus clientes com base nas quantidades de produtos.