Shortcode para simulador de parcelas na página do produto variável

Olá, meus amigos aspirantes que possuem lojas com o plugin WooCommerce.

Hoje, temos o prazer de apresentar a vocês uma nova funcionalidade para a sua loja online: o “Simulador de Parcelas”. Com esta função, seus clientes poderão visualizar facilmente as opções de parcelamento disponíveis para seus produtos, ajudando-os a tomar decisões de compra mais informadas. Vamos conhecer mais sobre essa funcionalidade incrível!

O que é o “Simulador de Parcelas”?

O “Simulador de Parcelas” é um recurso desenvolvido especialmente para lojas online que utilizam a plataforma WooCommerce. Com essa função, é possível exibir uma tabela de parcelamento para produtos simples ou variações de um produto variável. Isso permite que seus clientes vejam de forma clara e transparente as opções de parcelamento disponíveis, juntamente com as taxas de juros, se desejado.

Como usar a função

Para utilizar a função “Simulador de Parcelas”, você precisa adicionar o shortcode [simulador_parcelas] em qualquer lugar do conteúdo da página do produto. O shortcode pode ser personalizado com parâmetros opcionais para ajustar a exibição da tabela de parcelamento. Aqui estão os parâmetros disponíveis:

  • parcelas: Define o número máximo de parcelas. O padrão é 12.
  • taxas: Define as taxas de juros para cada parcela, separadas por vírgula. O padrão é vazio.
  • exibir_taxa: Define se a taxa de juros será exibida na tabela. Os valores possíveis são “true” (exibir) ou “false” (não exibir). O padrão é “true”.
  • exibir_nome_produto: Define se o nome do produto será exibido antes da tabela. Os valores possíveis são “true” (exibir) ou “false” (não exibir). O padrão é “true”.
  • exibir_valor_produto: Define se o valor do produto será exibido antes da tabela. Os valores possíveis são “true” (exibir) ou “false” (não exibir). O padrão é “true”.

Você pode personalizar esses parâmetros de acordo com as necessidades da sua loja, oferecendo uma experiência única aos seus clientes.

[simulador_parcelas parcelas="6" taxas="2,3,4,5,6" exibir_taxa="true" exibir_nome_produto="false" exibir_valor_produto="true"]

Este exemplo exibirá uma tabela de parcelamento com 6 parcelas, taxas de juros de 2%, 3%, 4%, 5% e 6%, exibirá o valor do produto antes da tabela e não exibirá o nome do produto.

Aproveite os benefícios do “Simulador de Parcelas”

Com o “Simulador de Parcelas”, você oferecerá uma experiência de compra mais transparente e conveniente para seus clientes. Eles poderão visualizar facilmente as opções de parcelamento e tomar decisões de compra mais informadas. Isso pode ajudar a aumentar a conversão de vendas e a satisfação dos clientes.

Então, por que não experimentar essa função em sua loja online? Com apenas alguns passos simples, você pode implementar o “Simulador de Parcelas” e começar a colher os benefícios imediatamente.

Se você tiver alguma dúvida ou precisar de suporte, nossa equipe estará pronta para ajudar. Aproveite essa nova funcionalidade e ofereça aos seus clientes uma experiência de compra ainda melhor!

Espero que esta documentação seja útil! Se você tiver mais perguntas ou precisar de mais assistência, não hesite em perguntar. Estou aqui para ajudar!

A seguir segue a nossa função!

Até a próxima postagem, Pedro Munhoz Criar Loja Online.


function simulador_parcelas_shortcode($atts) {
    global $product;

    if (!is_product()) {
        return 'Erro: esse shortcode só pode ser usado na página de produto.';
    }

    $atts = shortcode_atts(
        array(
            'parcelas' => 12,
            'taxas' => '',
            'exibir_taxa' => 'true',
            'exibir_nome_produto' => 'true',
            'exibir_valor_produto' => 'true',
        ),
        $atts,
        'simulador_parcelas'
    );

    $parcelas = intval($atts['parcelas']);
    $taxas = explode(',', $atts['taxas']);
    $exibir_taxa = strtolower($atts['exibir_taxa']) === 'true';
    $exibir_nome_produto = strtolower($atts['exibir_nome_produto']) === 'true';
    $exibir_valor_produto = strtolower($atts['exibir_valor_produto']) === 'true';

    $tabela = '';

    if ($product->is_type('variable')) {
        foreach ($product->get_available_variations() as $variation) {
            $variation_id = $variation['variation_id'];
            $variation_obj = wc_get_product($variation_id);

            if ($variation_obj) {
                $valor_variacao = $variation_obj->get_price();
                $variation_name = $variation_obj->get_name();

                if ($exibir_nome_produto && $variation_name !== $product->get_name()) {
                    $tabela .= '<h2>' . $variation_name . '</h2>';
                }
                
                if ($exibir_valor_produto) {
                    $tabela .= '<p>Valor do produto: ' . wc_price($valor_variacao) . '</p>';
                }

                $tabela .= '<table>';

                for ($i = 1; $i <= $parcelas; $i++) {
                    $taxa_juros = isset($taxas[$i - 1]) ? floatval($taxas[$i - 1]) : 0;
                    $valor_parcela = $valor_variacao / $i;
                    $valor_parcela_com_juros = $valor_parcela + ($valor_parcela * $taxa_juros / 100);

                    $tabela .= '<tr>';
                    $tabela .= '<td>' . $i . 'x de</td>';
                    $tabela .= '<td>' . wc_price($valor_parcela_com_juros) . '</td>';
                    if ($exibir_taxa) {
                        $tabela .= '<td>Taxa de juros: ' . $taxa_juros . '%</td>';
                    }
                    $tabela .= '</tr>';
                }

                $tabela .= '</table>';
            }
        }
    } else {
        if ($exibir_nome_produto) {
            $tabela .= '<h2>' . $product->get_name() . '</h2>';
        }
        
        if ($exibir_valor_produto) {
            $valor_produto = $product->get_price();
            $tabela .= '<p>Valor do produto: ' . wc_price($valor_produto) . '</p>';
        }

        $tabela .= '<table>';

        for ($i = 1; $i <= $parcelas; $i++) {
            $taxa_juros = isset($taxas[$i - 1]) ? floatval($taxas[$i - 1]) : 0;
            $valor_parcela = $valor_produto / $i;
            $valor_parcela_com_juros = $valor_parcela + ($valor_parcela * $taxa_juros / 100);

            $tabela .= '<tr>';
            $tabela .= '<td>' . $i . 'x de</td>';
            $tabela .= '<td>' . wc_price($valor_parcela_com_juros) . '</td>';
            if ($exibir_taxa) {
                $tabela .= '<td>Taxa de juros: ' . $taxa_juros . '%</td>';
            }
            $tabela .= '</tr>';
        }

        $tabela .= '</table>';
    }

    return $tabela;
}

add_shortcode('simulador_parcelas', 'simulador_parcelas_shortcode');

Para modificar a função simulador_parcelas_shortcode para exibir uma tabela de parcelamento única quando todas as variações de um produto tiverem o mesmo preço, você pode fazer a seguinte alteração no bloco if ($product->is_type('variable')):

// ...
if ($product->is_type('variable')) {
    $variations = $product->get_available_variations();
    $variation_prices = array();

    // Verifica se todas as variações possuem o mesmo preço
    foreach ($variations as $variation) {
        $variation_id = $variation['variation_id'];
        $variation_obj = wc_get_product($variation_id);
        $variation_prices[] = $variation_obj->get_price();
    }

    $is_same_price = count(array_unique($variation_prices)) === 1;

    if ($is_same_price) {
        // Todas as variações possuem o mesmo preço
        // Exibe tabela de parcelamento como um produto simples
        // Código do bloco else ...
    } else {
        // Existem variações com preços diferentes
        // Código original do bloco if ...
    }
}
// ...

Nesta modificação, foi adicionado um novo bloco de código para verificar se todas as variações têm o mesmo preço. Para isso, os preços de todas as variações são armazenados em um array $variation_prices, e a função array_unique é utilizada para remover valores duplicados. Se o resultado dessa comparação for igual a 1, isso significa que todas as variações têm o mesmo preço.

No caso em que todas as variações possuem o mesmo preço, você pode utilizar o código do bloco else para exibir a tabela de parcelamento como um produto simples. Caso contrário, o código original do bloco if será executado, exibindo a tabela de parcelamento com as variações individualmente.

Lembrando que você deve substituir o trecho // Código do bloco else ... pelo código correspondente para exibir a tabela de parcelamento como um produto simples, que está presente no código original do bloco else.

Aqui está a função simulador_parcelas_shortcode completa com as modificações mencionadas:

function simulador_parcelas_shortcode($atts) {
    global $product;

    if (!is_product()) {
        return 'Erro: esse shortcode só pode ser usado na página de produto.';
    }

    $atts = shortcode_atts(
        array(
            'parcelas' => 12,
            'taxas' => '',
            'exibir_taxa' => 'true',
            'exibir_nome_produto' => 'true',
            'exibir_valor_produto' => 'true',
        ),
        $atts,
        'simulador_parcelas'
    );

    $parcelas = intval($atts['parcelas']);
    $taxas = explode(',', $atts['taxas']);
    $exibir_taxa = strtolower($atts['exibir_taxa']) === 'true';
    $exibir_nome_produto = strtolower($atts['exibir_nome_produto']) === 'true';
    $exibir_valor_produto = strtolower($atts['exibir_valor_produto']) === 'true';

    $tabela = '';

    if ($product->is_type('variable')) {
        $variations = $product->get_available_variations();
        $variation_prices = array();

        // Verifica se todas as variações possuem o mesmo preço
        foreach ($variations as $variation) {
            $variation_id = $variation['variation_id'];
            $variation_obj = wc_get_product($variation_id);
            $variation_prices[] = $variation_obj->get_price();
        }

        $is_same_price = count(array_unique($variation_prices)) === 1;

        if ($is_same_price) {
            // Todas as variações possuem o mesmo preço
            if ($exibir_nome_produto) {
                $tabela .= '<h2>' . $product->get_name() . '</h2>';
            }
            
            if ($exibir_valor_produto) {
                $valor_produto = $product->get_price();
                $tabela .= '<p>Valor do produto: ' . wc_price($valor_produto) . '</p>';
            }

            $tabela .= '<table>';

            for ($i = 1; $i <= $parcelas; $i++) {
                $taxa_juros = isset($taxas[$i - 1]) ? floatval($taxas[$i - 1]) : 0;
                $valor_parcela = $valor_produto / $i;
                $valor_parcela_com_juros = $valor_parcela + ($valor_parcela * $taxa_juros / 100);

                $tabela .= '<tr>';
                $tabela .= '<td>' . $i . 'x de</td>';
                $tabela .= '<td>' . wc_price($valor_parcela_com_juros) . '</td>';
                if ($exibir_taxa) {
                    $tabela .= '<td>Taxa de juros: ' . $taxa_juros . '%</td>';
                }
                $tabela .= '</tr>';
            }

            $tabela .= '</table>';
        } else {
            // Existem variações com preços diferentes
            foreach ($variations as $variation) {
                $variation_id = $variation['variation_id'];
                $variation_obj = wc_get_product($variation_id);

                if ($variation_obj) {
                    $valor_variacao = $variation_obj->get_price();
                    $variation_name = $variation_obj->get_name();

                    if ($exibir_nome_produto && $variation_name !== $product->get_name()) {
                        $tabela .= '<h2>' . $variation_name . '</h2>';
                    }
                    
                    if ($exibir_valor_produto) {
                        $tabela .= '<p>Valor do produto: ' . wc_price($valor_variacao) . '</p>';
                    }

                    $tabela .= '<table>';

                    for ($i = 1; $i <= $parcelas; $i++) {
                        $taxa_juros = isset($taxas[$i - 1]) ? floatval($taxas[$i - 1]) : 0;
                        $valor_parcela = $valor_variacao / $i;
                        $valor_parcela_com_juros = $valor_parcela + ($valor_parcela * $taxa_juros / 100);

                        $tabela .= '<tr>';
                        $tabela .= '<td>' . $i . 'x de</td>';
                        $tabela .= '<td>' . wc_price($valor_parcela_com_juros) . '</td>';
                        if ($exibir_taxa) {
                            $tabela .= '<td>Taxa de juros: ' . $taxa_juros . '%</td>';
                        }
                        $tabela .= '</tr>';
                    }

                    $tabela .= '</table>';
                }
            }
        }
    } else {
        // Produto simples
        if ($exibir_nome_produto) {
            $tabela .= '<h2>' . $product->get_name() . '</h2>';
        }
        
        if ($exibir_valor_produto) {
            $valor_produto = $product->get_price();
            $tabela .= '<p>Valor do produto: ' . wc_price($valor_produto) . '</p>';
        }

        $tabela .= '<table>';

        for ($i = 1; $i <= $parcelas; $i++) {
            $taxa_juros = isset($taxas[$i - 1]) ? floatval($taxas[$i - 1]) : 0;
            $valor_parcela = $valor_produto / $i;
            $valor_parcela_com_juros = $valor_parcela + ($valor_parcela * $taxa_juros / 100);

            $tabela .= '<tr>';
            $tabela .= '<td>' . $i . 'x de</td>';
            $tabela .= '<td>' . wc_price($valor_parcela_com_juros) . '</td>';
            if ($exibir_taxa) {
                $tabela .= '<td>Taxa de juros: ' . $taxa_juros . '%</td>';
            }
            $tabela .= '</tr>';
        }

        $tabela .= '</table>';
    }

    return $tabela;
}

add_shortcode('simulador_parcelas', 'simulador_parcelas_shortcode');