Preço a partir de no WooCommerce: esconder o intervalo do produto variável

Produto variável no WooCommerce 9.x mostra na listagem algo como R$ 49,00 – R$ 129,00. O cliente bate o olho no número maior, acha caro e nem abre a página. Trocar isso por A partir de R$ 49,00 é um filtro só no functions.php do tema filho.

O filtro woocommerce_variable_price_html

add_filter( 'woocommerce_variable_price_html', 'rt_preco_a_partir_de', 10, 2 );

function rt_preco_a_partir_de( $price_html, $product ) {
    $min = $product->get_variation_price( 'min', true );
    $max = $product->get_variation_price( 'max', true );

    if ( $min === $max ) {
        return wc_price( $min ) . $product->get_price_suffix();
    }

    return sprintf( 'A partir de %s', wc_price( $min ) ) . $product->get_price_suffix();
}

Repare que eu não escrevo valor na mão. O get_variation_price( 'min', true ) devolve o menor preço já com o tratamento de imposto de exibição da loja, e o wc_price() aplica símbolo, separador e casas decimais que você configurou. O filtro recebe o preço já com o sufixo, então quem monta a string do zero precisa somar o get_price_suffix() de novo. E quando todas as variações custam o mesmo o intervalo nem existe: por isso o teste de igualdade.

Se o valor exibido estiver velho, é cache de preço

O filtro pega na hora. Quem atrasa são os preços: o mínimo e o máximo saem de um cache por produto, então mexer numa variação por importação ou direto no banco deixa a vitrine desatualizada.

# apaga TODOS os transientes do site, não só os do Woo
sudo -u www-data wp transient delete --all

# object cache persistente (Redis, Memcached) não sai no comando acima
sudo -u www-data wp cache flush

Dentro de um importador o cirúrgico é melhor: chame wc_delete_product_transients( $product_id ) depois de salvar cada produto. Se o intervalo insistir, olhe o cache de página do nginx e o plugin de cache antes de culpar o filtro.

Se travou nisso e precisa de ajuda, me chama aqui.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *