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.