Claro! Aqui está uma descrição da função exibir_valor_parcelado_shortcode:
Função exibir_valor_parcelado_shortcode
A função exibir_valor_parcelado_shortcode é uma função personalizada em PHP que pode ser utilizada em WordPress para exibir informações de preços parcelados de produtos. Ela cria um shortcode chamado [exibir_valor_parcelado] que pode ser inserido em páginas, postagens ou widgets para exibir os valores parcelados de um produto.
Parâmetros
A função aceita os seguintes parâmetros:
- frase_anterior(opcional): Define a frase anterior ao exibir os preços parcelados. O valor padrão é “Ou compre parcelado em até”.
- frase_posterior(opcional): Define a frase posterior ao exibir os preços parcelados. O valor padrão é “no cartão de crédito”.
- frase_anterior_atributo(opcional): Define a frase anterior específica para variações de produtos que são atributos. O valor padrão é “Ou compre parcelado no(a)”.
- frase_posterior_atributo(opcional): Define a frase posterior específica para variações de produtos que são atributos. O valor padrão é vazio.
- parcelas(opcional): Define o número de parcelas para cálculo dos preços. O valor padrão é 10.
- taxa(opcional): Define a taxa de juros a ser aplicada nos preços parcelados. O valor padrão é 3.
Uso
Para utilizar a função, é necessário adicionar o shortcode [exibir_valor_parcelado] em uma página, postagem ou widget. É possível personalizar os parâmetros do shortcode conforme necessário. Exemplo de uso:
[exibir_valor_parcelado frase_anterior="Aproveite nossas promoções" parcelas=12 taxa=2.5]Exemplo de Implementação
A função exibir_valor_parcelado_shortcode deve ser adicionada ao arquivo functions.php do tema ativo do WordPress ou a um plugin personalizado. Após adicioná-la, o shortcode [exibir_valor_parcelado] estará disponível para uso.
function exibir_valor_parcelado_shortcode($atts) {
    // Código da função
}
add_shortcode('exibir_valor_parcelado', 'exibir_valor_parcelado_shortcode');Recomenda-se que as alterações sejam feitas em um tema filho ou em um plugin personalizado para garantir a manutenção das modificações mesmo em atualizações futuras do tema.
Com essa função, é possível exibir informações de preços parcelados para produtos, considerando variações e atributos. Os parâmetros personalizáveis permitem adaptar a exibição de acordo com as necessidades específicas de cada site ou loja virtual.
Lembre-se de ajustar os parâmetros do shortcode conforme suas preferências e requisitos.
Aqui está a versão corrigida da função para se ajustar a produtos variáveis exibir_valor_parcelado_shortcode:
function exibir_valor_parcelado_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'frase_anterior' => '',
            'frase_posterior' => '',
            'frase_anterior_atributo' => '',
            'frase_posterior_atributo' => '',
            'parcelas' => '',
            'taxa' => '',
        ),
        $atts,
        'exibir_valor_parcelado'
    );
    global $product;
    if (!$product) {
        return 'Erro: nenhum produto encontrado.';
    }
    $output = '';
    $frase_anterior = esc_html($atts['frase_anterior']);
    $frase_posterior = esc_html($atts['frase_posterior']);
    $frase_anterior_atributo = esc_html($atts['frase_anterior_atributo']);
    $frase_posterior_atributo = esc_html($atts['frase_posterior_atributo']);
    $parcelas = intval($atts['parcelas']);
    $taxa = floatval($atts['taxa']);
    if ($product->is_type('variable')) {
        $variations = $product->get_available_variations();
        if (empty($variations)) {
            return 'Erro: nenhuma variação encontrada para este produto.';
        }
        $output .= $frase_anterior_atributo . ' ';
        $variation_prices = array();
        foreach ($variations as $variation) {
            $variation_id = $variation['variation_id'];
            $variation_obj = wc_get_product($variation_id);
            if ($variation_obj) {
                $attributes = $variation_obj->get_variation_attributes();
                $variation_price = $variation_obj->get_price();
                $valor_parcela = $variation_price / $parcelas;
                $valor_parcela_com_taxa = $valor_parcela + ($valor_parcela * $taxa / 100);
                $variation_info = implode(' ', $attributes);
                $variation_prices[] = $variation_info . ' em até ' . $parcelas . 'x de ' . wc_price($valor_parcela_com_taxa);
            }
        }
        $output .= implode(', ', $variation_prices);
        if (!empty($frase_posterior_atributo)) {
            $output .= ' ' . $frase_posterior_atributo;
        }
    } else {
        $output .= $frase_anterior . ' ';
        $product_price = $product->get_price();
        $valor_parcela = $product_price / $parcelas;
        $valor_parcela_com_taxa = $valor_parcela + ($valor_parcela * $taxa / 100);
        $output .= $parcelas . 'x de ' . wc_price($valor_parcela_com_taxa) . ' ';
        if (!empty($frase_posterior)) {
            $output .= $frase_posterior;
        }
    }
    return $output;
}
add_shortcode('exibir_valor_parcelado', 'exibir_valor_parcelado_shortcode');Exibir apenas o preço único parcelado caso todas as variações tenham o mesmo preço
Para fazer a alteração na função e exibir apenas o preço único parcelado caso todas as variações tenham o mesmo preço, você pode adicionar uma verificação adicional antes de iterar sobre as variações. Aqui está o código modificado para implementar essa alteração:
function exibir_valor_parcelado_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'frase_anterior' => '',
            'frase_posterior' => '',
            'frase_anterior_atributo' => '',
            'frase_posterior_atributo' => '',
            'parcelas' => '',
            'taxa' => '',
        ),
        $atts,
        'exibir_valor_parcelado'
    );
    global $product;
    if (!$product) {
        return 'Erro: nenhum produto encontrado.';
    }
    $output = '';
    $frase_anterior = esc_html($atts['frase_anterior']);
    $frase_posterior = esc_html($atts['frase_posterior']);
    $frase_anterior_atributo = esc_html($atts['frase_anterior_atributo']);
    $frase_posterior_atributo = esc_html($atts['frase_posterior_atributo']);
    $parcelas = intval($atts['parcelas']);
    $taxa = floatval($atts['taxa']);
    if ($product->is_type('variable')) {
        $variations = $product->get_available_variations();
        if (empty($variations)) {
            return 'Erro: nenhuma variação encontrada para este produto.';
        }
        // Check if all variations have the same price
        $same_price = true;
        $first_variation_price = null;
        foreach ($variations as $variation) {
            $variation_id = $variation['variation_id'];
            $variation_obj = wc_get_product($variation_id);
            if ($variation_obj) {
                $variation_price = $variation_obj->get_price();
                if ($first_variation_price === null) {
                    $first_variation_price = $variation_price;
                } elseif ($variation_price !== $first_variation_price) {
                    $same_price = false;
                    break;
                }
            }
        }
        if ($same_price) {
            // If all variations have the same price, show the single price
            $output .= $frase_anterior . ' ';
            $product_price = $product->get_price();
            $valor_parcela = $product_price / $parcelas;
            $valor_parcela_com_taxa = $valor_parcela + ($valor_parcela * $taxa / 100);
            $output .= $parcelas . 'x de ' . wc_price($valor_parcela_com_taxa) . ' ';
            if (!empty($frase_posterior)) {
                $output .= $frase_posterior;
            }
        } else {
            // If variations have different prices, show individual variation prices
            $output .= $frase_anterior_atributo . ' ';
            $variation_prices = array();
            foreach ($variations as $variation) {
                $variation_id = $variation['variation_id'];
                $variation_obj = wc_get_product($variation_id);
                if ($variation_obj) {
                    $attributes = $variation_obj->get_variation_attributes();
                    $variation_price = $variation_obj->get_price();
                    $valor_parcela = $variation_price / $parcelas;
                    $valor_parcela_com_taxa = $valor_parcela + ($valor_parcela * $taxa / 100);
                    $variation_info = implode(' ', $attributes);
                    $variation_prices[] = $variation_info . ' em até ' . $parcelas . 'x de ' . wc_price($valor_parcela_com_taxa);
                }
            }
            $output .= implode(', ', $variation_prices);
            if (!empty($frase_posterior_atributo)) {
                $output .= ' ' . $frase_posterior_atributo;
            }
        }
    } else {
        // If the product is not variable, show the single price
        $output .= $frase_anterior . ' ';
        $product_price = $product->get_price();
        $valor_parcela = $product_price / $parcelas;
        $valor_parcela_com_taxa = $valor_parcela + ($valor_parcela * $taxa / 100);
        $output .= $parcelas . 'x de ' . wc_price($valor_parcela_com_taxa) . ' ';
        if (!empty($frase_posterior)) {
            $output .= $frase_posterior;
        }
    }
    return $output;
}
add_shortcode('exibir_valor_parcelado', 'exibir_valor_parcelado_shortcode');
Nessa modificação, adicionamos um loop antes de iterar sobre as variações para verificar se todas elas têm o mesmo preço. Se todas as variações tiverem o mesmo preço, a função irá exibir apenas o preço único parcelado, assim como para produtos simples. Caso contrário, a função irá exibir os preços parcelados individuais para cada variação.
Dessa forma, a função agora atende à condição de exibir apenas o preço único parcelado quando todas as variações possuírem o mesmo preço.
 
								 
							