Omnibus no WooCommerce: o preço mais baixo dos últimos 30 dias

Omnibus no WooCommerce: o preço mais baixo dos últimos 30 dias

Última verificação: 27 de outubro de 2026
32 min de leitura
Guia
Especialista WooCommerce

Desde 28 de maio de 2022, uma loja online em Portugal que anuncia uma redução de preço tem de a anunciar por referência ao preço mais baixo que praticou nos 30 dias consecutivos anteriores. A regra está no Decreto-Lei n.º 70/2007, na redação do Decreto-Lei n.º 109-G/2021, que transpõe o artigo 6.º-A da Diretiva 98/6/CE na versão dada pela diretiva Omnibus. O mesmo diploma põe a prova desse preço a cargo do vendedor. O WooCommerce não guarda histórico de preços, por isso esse número tem de ser calculado por um plugin ou por código próprio. Este artigo mostra o que diz a lei, como deve funcionar um histórico de preços no WooCommerce, em que armadilhas cai uma implementação típica e como verificar numa hora se a sua loja mostra o número certo.

O artigo descreve o conteúdo das normas e o funcionamento do software à data da publicação. Não é aconselhamento jurídico individual para a sua loja.

#O que exige a diretiva Omnibus nas reduções de preço?

A Diretiva (UE) 2019/2161, conhecida como diretiva Omnibus (EUR-Lex), acrescentou à Diretiva 98/6/CE, relativa à indicação dos preços, um novo artigo 6.º-A (EUR-Lex, texto consolidado). O artigo tem cinco números:

  1. Qualquer anúncio de redução de preço indica o preço anterior aplicado pelo comerciante durante um determinado período antes da redução.
  2. O preço anterior é o preço mais baixo aplicado pelo comerciante num período não inferior a 30 dias antes da aplicação da redução.
  3. Os Estados-Membros podem prever regras diferentes para bens que se deterioram ou perdem validade rapidamente.
  4. Para um produto no mercado há menos de 30 dias, os Estados-Membros podem prever um período mais curto.
  5. Os Estados-Membros podem determinar que, quando a redução aumenta progressivamente, o preço anterior é o preço sem redução antes da primeira aplicação da redução.

Uma diretiva vincula os Estados, não as lojas. Em Portugal, a regra chega à sua loja através do Decreto-Lei n.º 70/2007, de 26 de março, que regula as práticas comerciais com redução de preço. O Decreto-Lei n.º 109-G/2021 reescreveu as definições e o preço de referência, com efeitos a partir de 28 de maio de 2022. O ponto de partida é a definição do artigo 3.º, n.º 2, alínea a):

«Preço mais baixo anteriormente praticado», o preço mais baixo a que o produto foi vendido nos últimos 30 dias consecutivos anteriores à aplicação da redução do preço;

Fonte: artigo 3.º, n.º 2, alínea a), do Decreto-Lei n.º 70/2007, na redação do Decreto-Lei n.º 109-G/2021, versão consolidada de 3-3-2023 (Diário da República).

A obrigação propriamente dita está no artigo 5.º, n.º 1:

A redução de preço anunciada deve ser real, por referência ao preço mais baixo anteriormente praticado para o mesmo produto ou, quando se trate de um produto não comercializado anteriormente pelo agente económico, por referência ao preço a praticar após o período de redução.

Fonte: artigo 5.º, n.º 1, do Decreto-Lei n.º 70/2007, versão consolidada de 3-3-2023 (Diário da República).

E o n.º 5 do mesmo artigo decide quem tem de provar o número:

Incumbe ao operador económico a prova documental do preço mais baixo anteriormente praticado e, no caso de serem utilizadas condições mais vantajosas do que as utilizadas nos períodos de vendas sem redução de preço, a prova de que a vantagem é real e concretizável

Fonte: artigo 5.º, n.º 5, do Decreto-Lei n.º 70/2007, versão consolidada de 3-3-2023 (Diário da República).

Destas normas saem cinco requisitos técnicos para a loja. A janela conta-se antes da aplicação da redução, ou seja, para trás a partir do dia em que a promoção começa. São 30 dias consecutivos, não 30 dias com vendas. Conta o preço a que o produto foi vendido, isto é, o preço a que o cliente podia de facto comprar; um preço introduzido no painel para o futuro ainda não foi praticado. A prova é da loja, o que transforma o histórico de preços no documento que apresenta se alguém perguntar de onde veio o número. E o artigo 2.º estende o regime às vendas à distância e à oferta de serviços, com as devidas adaptações, por isso uma loja que vende cursos, consultas ou vales de serviços pelo WooCommerce também está abrangida.

Há uma exigência portuguesa que vai além da diretiva. O artigo 4.º, n.º 1, manda indicar de modo inequívoco a modalidade de venda (saldos, promoção ou liquidação), o tipo de produtos, o preço mais baixo anteriormente praticado, a data de início e o período de duração. Numa loja WooCommerce, o preço mais baixo e as datas da promoção agendada são dados que o sistema já tem ou pode ter. A modalidade e o período, em regra, são texto que a loja tem de acrescentar à página da campanha ou ao produto.

O artigo 4.º, n.º 6, acrescenta que o n.º 1 não impede anúncios ou declarações gerais de reduções de preços em comunicações publicitárias. Uma faixa “saldos de verão” na página inicial é uma declaração geral. Uma faixa que mostra um produto concreto com o preço riscado e o preço reduzido já é o anúncio da redução desse produto, e a leitura prudente é tratá-la como a ficha do produto.

O texto da lei não diz onde exatamente o número deve aparecer numa loja online, apenas que a indicação tem de ser inequívoca. Para uma loja WooCommerce, a regra prática mais segura é esta: onde se vê o preço riscado e o preço promocional, vê-se também o preço mais baixo dos 30 dias, com o mesmo destaque e na mesma moeda. O diploma não indica nenhuma entidade fiscalizadora nas disposições aqui citadas, e este artigo não trata das coimas.

#Quando é que os 30 dias se contam de outra forma?

O artigo 3.º, n.º 2, alínea a), descreve o caso típico. Três outras situações alteram a forma de contar ou obrigam a loja a tomar uma decisão.

#Produto lançado pela primeira vez ou à venda há pouco tempo

O artigo 5.º, n.º 1, trata à parte o produto que o agente económico nunca comercializou antes: a referência passa a ser o preço a praticar depois do período de redução. E o artigo 5.º-A, n.º 2, exige que, quando esse preço futuro é anunciado, o operador demonstre que ele é efetivamente praticado durante um período razoável nos três meses seguintes à promoção. Para o histórico de preços isto quer dizer duas coisas: a loja tem de saber se o produto é novo, e tem de continuar a registar preços depois de a promoção de lançamento acabar, porque é aí que está a prova.

Aqui esconde-se uma armadilha para as lojas que instalam o plugin agora. Um produto vendido há dois anos tem, no plugin novo, um histórico que começa hoje. O plugin não sabe que o produto é antigo e não tem nenhum registo anterior à instalação. Por isso, um plugin sensato tem uma definição para o caso “sem histórico”, e a loja tem de decidir conscientemente o que mostra durante os primeiros 30 dias depois da instalação. O mais seguro é não lançar novas reduções enquanto o histórico não cobrir a janela completa, ou importar o histórico do plugin anterior, se existia um. Tendo em conta o artigo 5.º, n.º 5, esta decisão pesa mais em Portugal: sem histórico, a loja não tem prova documental do número que mostra.

#Produtos perecíveis e perto do fim da validade

O artigo 5.º, n.º 6, tem uma regra própria para os produtos agrícolas e alimentares perecíveis (os que se podem tornar impróprios para venda no prazo de 30 dias após a colheita, produção ou transformação, segundo o artigo 3.º, n.º 2, alínea c)) e para os produtos a quatro semanas do fim do prazo de validade. Nestes casos, a referência é o preço mais baixo dos últimos 15 dias consecutivos em que o produto esteve à venda, ou de todo o período de disponibilização ao público, se for inferior. Uma loja de produtos alimentares, flores ou artigos com validade curta precisa, portanto, de dois modos de cálculo: a janela normal de 30 dias e a janela de 15 dias. O plugin deve permitir marcar esses produtos, por exemplo por categoria ou por um campo no produto, e a loja tem de lembrar-se de que um produto não perecível pode entrar na regra dos 15 dias quando fica a quatro semanas da validade.

#Redução que aumenta por etapas

O artigo 6.º-A, n.º 5, da diretiva deixou aos Estados a opção de manter, nas reduções progressivas, o preço anterior à primeira etapa. Portugal usou essa opção. O artigo 4.º, n.º 5, do decreto-lei diz que, no caso de aumento gradual e ininterrupto da redução de preço, se considera que o preço mais baixo anteriormente praticado é o preço antes da aplicação da primeira redução.

Exemplo ilustrativo: o produto custa 100, na segunda-feira desce para 90 e uma semana depois para 80, sem regressar aos 100 entre as duas etapas. No momento da segunda etapa, a referência continua a ser 100. Se pelo meio o preço voltar a 100 e só depois descer para 80, a campanha deixou de ser ininterrupta, e a nova redução tem a sua própria janela, onde o 90 entra no cálculo. Um plugin que trata cada etapa como redução nova mostra 90 onde a lei permite 100; um plugin que mantém sempre o primeiro preço mostra 100 mesmo depois de uma interrupção. Se planeia campanhas do tipo “cada semana mais barato”, confirme como o seu plugin identifica uma campanha contínua e mantenha o preço riscado e a percentagem coerentes com esse número.

#O WooCommerce tem o preço mais baixo de 30 dias incorporado?

Não tem. Verificámos o código do WooCommerce no ramo principal do repositório no GitHub a 27 de outubro de 2026: as pesquisas por “omnibus” e “lowest price” não devolvem nada, e o núcleo não tem tabela nem campo com histórico de preços.

Um produto WooCommerce guarda o estado atual:

DadoMétodo em WC_ProductO que diz sobre o passado
Preço normalget_regular_price()Só o valor atual
Preço promocionalget_sale_price()Só o valor atual, mesmo quando a promoção ainda não começou
Início da promoçãoget_date_on_sale_from()Data agendada, sem rasto de promoções anteriores
Fim da promoçãoget_date_on_sale_to()Idem
Preço ativoget_price()O preço em vigor agora

Quando altera um preço, o valor anterior desaparece. A promoção agendada é ativada por uma tarefa em segundo plano (woocommerce_scheduled_sales), que muda o preço ativo no momento do início. Quando a promoção termina, volta o preço normal e a loja não guarda registo de que a promoção existiu.

A conclusão é uma: o preço mais baixo de 30 dias não pode ser calculado a partir dos dados do WooCommerce nem reconstruído para trás. É preciso um registo de histórico separado, mantido desde o dia da instalação. Isso faz-se com um plugin ou com código próprio. Se encomendar o trabalho a um programador, a especificação tem de descrever o registo do histórico e as regras de cálculo do mínimo. Uma etiqueta com o número faz-se em meia hora; um histórico correto é um módulo à parte, com testes. Se precisa desse módulo ou de uma auditoria ao que já tem, descrevemos o serviço na página de desenvolvimento WooCommerce.

#Como deve funcionar o histórico de preços da loja?

O histórico de preços é uma tabela de registos: produto (ou variação), preço, moeda e data a partir da qual esse preço vigora. É daí que se calcula o mínimo da janela. Parece simples, mas cada uma das regras abaixo nasceu de um erro que alguém já cometeu.

#O registo nasce quando o preço passa a vigorar

O registo acrescenta-se quando muda o preço ativo, aquele a que o cliente pode comprar. Gravar o produto no painel não chega como gatilho, porque na mesma gravação pode agendar uma promoção para o mês seguinte. Se o plugin gravar nesse momento o preço promocional, esse preço entra no histórico antes de alguém poder comprar a esse valor e, quando a promoção começar, passa a ser o “preço mais baixo dos 30 dias”. Numa promoção agendada, o registo deve nascer no momento em que o WooCommerce a ativa.

A segunda regra são as alterações no mesmo dia. Se de manhã baixa o preço e à tarde o repõe, durante algumas horas o cliente pôde comprar mais barato. Um histórico que grava um único preço por dia perde essa alteração, e esse preço foi praticado.

#A janela conta-se a partir do início da redução

A janela de 30 dias termina no momento em que a redução é aplicada e não anda com a data de hoje. Exemplo ilustrativo: a promoção começou a 1 de novembro e dura três semanas. A 15 de novembro, o preço mais baixo dos 30 dias continua a ser o mínimo do período de 2 a 31 de outubro. Se o plugin calcular “os últimos 30 dias a contar de hoje”, ao fim de alguns dias de promoção o próprio preço promocional entra na janela e a loja mostra “preço mais baixo dos últimos 30 dias: 80” ao lado do preço 80. Uma mensagem assim não diz nada ao cliente e contraria a lei.

#O preço em vigor no momento em que a janela abre

É o caso em que tropeça a maioria das implementações simples. Os registos só nascem quando o preço muda. Exemplo ilustrativo: o produto custa 100 durante 40 dias e hoje entra uma redução para 80. O último registo com o preço 100 tem 40 dias, por isso não há nenhum registo dentro da janela de 30 dias. A consulta “mínimo dos registos dos últimos 30 dias” devolve um resultado vazio ou apenas o 80.

A lógica correta tira o mínimo de duas fontes: os registos dentro da janela e o último registo anterior ao início da janela, porque esse preço continuava em vigor quando a janela abriu. Neste exemplo, o resultado é 100. A mesma condição aplica-se à limpeza do histórico: a tarefa que apaga registos com mais de 30 dias não pode apagar o último registo anterior à janela, porque é a única prova do preço 100.

#A moeda gravada em cada registo

Uma loja que mudou de moeda base, ou que usa um plugin multimoeda, tem no histórico preços em moedas diferentes. Cada registo tem de ter a moeda, e a consulta do mínimo tem de filtrar pela moeda em que o cliente está a ver o produto. Caso contrário, ao lado de um preço em euros aparece um preço mais baixo noutra moeda, ou um mínimo calculado a partir de números que não se podem comparar.

#Os impostos tratados como o preço ao lado

O WooCommerce permite introduzir preços sem ou com IVA e definir à parte como são mostrados na loja e no carrinho. O preço mais baixo tem de passar pelas mesmas definições de apresentação que o preço ao lado, por exemplo através de wc_get_price_to_display(). Se a loja introduz preços sem IVA e mostra preços com IVA, o número bruto do histórico fica abaixo do real no valor do imposto e induz o cliente em erro.

#Produto variável calculado por variação

Um produto variável no WooCommerce não tem preço próprio. Os preços estão nas variações, e a ficha do produto mostra um intervalo. O histórico tem de ser mantido para cada variação em separado, e a informação do preço mais baixo deve aparecer depois de escolhida a variação, junto com o preço dessa variação. Nas listas de produtos, onde se vê o intervalo, a loja precisa de uma regra pensada, por exemplo mostrar a informação da variação que define o limite inferior do intervalo.

#A limpeza do histórico mantém o registo anterior à janela

O histórico cresce com cada alteração de preço, por isso o plugin vai cortando. A tarefa de limpeza apaga registos antigos, mas mantém para cada produto o último registo anterior à janela. Essa tarefa tem de funcionar depois de uma atualização do plugin, sem nova ativação. Em Portugal há uma razão adicional para não ser agressivo na limpeza: com a prova documental a cargo do operador económico, faz sentido conservar, ou exportar periodicamente, o histórico das campanhas já terminadas.

#Como se calcula o preço mais baixo numa promoção agendada?

A promoção agendada é a fonte mais comum de números errados, porque no painel do WooCommerce o preço promocional existe antes de começar a vigorar. Exemplo ilustrativo, passo a passo:

  1. O produto custa 100 há muito tempo. O histórico tem um registo: 100, com 60 dias.
  2. A 20 de outubro define o preço promocional 80, com início a 1 de novembro, e grava o produto.
  3. Até 31 de outubro o cliente paga 100. O histórico não pode ter um registo de 80, porque esse preço não foi praticado.
  4. A 1 de novembro o WooCommerce ativa a promoção. Nesse momento, o histórico recebe o registo 80.
  5. A janela vai de 2 a 31 de outubro. Dentro da janela não há registos, por isso conta o registo anterior à janela: 100.
  6. A loja mostra o preço 80, o 100 riscado e a informação “preço mais baixo nos 30 dias anteriores à redução: 100”.
  7. A 15 de novembro o resultado é o mesmo, porque a janela está presa a 1 de novembro.

Se no passo 2 o plugin gravar logo o 80 no histórico, no passo 6 mostra 80 como preço mais baixo. Se no passo 5 ignorar o registo anterior à janela, não mostra nada ou mostra 80. Se no passo 7 contar a janela a partir de hoje, mostra 80. Cada um destes resultados é um erro diferente, e os três parecem iguais na loja.

#O que falha na prática no cálculo do preço mais baixo?

Qualquer implementação de histórico de preços, seja um plugin pronto ou código feito por medida, pode cair nas mesmas armadilhas. Descrevemos cada uma: de onde vem, como detetá-la na sua loja e o que faz uma implementação correta.

#Promoção agendada gravada antes do início

De onde vem. A implementação grava o histórico quando o produto é gravado no painel. Se nessa gravação agenda uma promoção para a semana seguinte, o preço promocional entra no histórico antes de vigorar e pode tornar-se o preço mais baixo dos 30 dias.

Como detetar. Agende uma promoção para amanhã e verifique a ficha do produto depois do início. Se o preço mais baixo for igual ao preço promocional, o histórico gravou a promoção cedo demais.

O que faz uma implementação correta. Grava apenas a promoção em curso, no momento em que o WooCommerce a ativa.

#Preço promocional indicado como o mais baixo

De onde vem. A janela de 30 dias é contada a partir da data de hoje. Ao fim de alguns dias de promoção, o preço promocional entra na janela e passa a ser o mínimo. O mesmo efeito surge com um histórico que grava um preço por dia e perde as alterações dentro do dia.

Como detetar. Num produto em promoção, compare o preço promocional com o “preço mais baixo dos 30 dias”. Se forem iguais e o produto custava mais antes da promoção, o cálculo está errado.

O que faz uma implementação correta. Fecha a janela no momento em que a redução começa e grava todas as alterações do preço ativo, incluindo várias no mesmo dia.

#Nenhum registo na janela para um produto de preço estável

De onde vem. Os registos só nascem quando o preço muda, por isso um produto com o mesmo preço há mais de 30 dias não tem nenhum registo dentro da janela. Uma consulta que calcula o mínimo apenas com os registos de dentro da janela não encontra nada. Uma limpeza que apaga tudo o que tem mais de 30 dias elimina a única prova do preço anterior à redução, e em Portugal essa é precisamente a prova documental que a lei pede à loja.

Como detetar. Escolha um produto cujo preço não muda há mais de um mês e baixe-o. A informação tem de mostrar o preço antigo.

O que faz uma implementação correta. Calcula o mínimo com os registos da janela mais o último registo anterior à janela, e a limpeza mantém sempre esse registo.

#Preço mais baixo noutra moeda

De onde vem. O histórico grava valores sem moeda, ou grava a moeda mas a consulta do mínimo não a usa. Uma loja que mudou de moeda base, ou que tem um plugin multimoeda a mudar a moeda em cada pedido, mostra então o preço mais baixo numa moeda ao lado do preço de venda noutra.

Como detetar. Mude a moeda na loja e veja um produto em promoção. O preço mais baixo tem de estar na mesma moeda que o preço de venda.

O que faz uma implementação correta. Grava a moeda em cada registo e filtra o mínimo pela moeda do pedido atual.

#Definições que dão um resultado não conforme

De onde vem. Os plugins têm normalmente definições para a duração da janela e para o comportamento nos casos-limite. Algumas levam a um resultado contrário à lei: janela inferior a 30 dias, a opção “hoje” como fonte do preço mais baixo ou a apresentação do preço atual como o mais baixo.

Como detetar. Reveja as definições do plugin Omnibus na sua loja: a duração da janela e o comportamento quando não há histórico.

O que faz uma implementação correta. Vem com valores por omissão conformes com a lei e avisa quando alguém os altera para valores não conformes.

#Sem informação nas grelhas de produtos de um tema de blocos

De onde vem. Nos temas de blocos, as listas de produtos são construídas pelo bloco Product Collection. O WooCommerce só dispara os hooks clássicos do loop de produtos na grelha da loja, por isso uma implementação baseada nesses hooks não mostra a informação na página inicial, nos produtos relacionados nem nas sugestões de venda cruzada do carrinho. Com duas fontes de apresentação, a mesma informação pode também aparecer duas vezes.

Como detetar. Coloque na página inicial um bloco Product Collection com um produto em promoção e verifique se junto ao preço riscado aparece o preço mais baixo dos 30 dias, e uma só vez.

O que faz uma implementação correta. Acrescenta a informação em todas as grelhas que mostram um preço riscado, seja qual for o bloco ou o modelo.

#Sem informação na ficha de produto feita com Elementor Pro

De onde vem. O modelo de ficha de produto do Elementor Pro substitui o hook woocommerce_single_product_summary. Uma implementação que só se liga a esse hook não mostra nada nessa ficha.

Como detetar. Abra um produto em promoção numa ficha construída com o Elementor e verifique se a informação está junto ao preço.

O que faz uma implementação correta. Suporta os modelos do construtor de páginas ou acrescenta a informação ao nível da apresentação do preço.

#Importação do histórico que conta promoções apenas agendadas

De onde vem. A importação a partir do plugin antigo lê o campo bruto do preço promocional. Esse campo inclui também promoções apenas agendadas, por isso um preço a que ninguém comprou entra no histórico como preço de venda.

Como detetar. Depois da importação, compare o preço mais baixo de um produto que tinha uma promoção agendada mas nunca iniciada com o preço a que esse produto foi realmente vendido.

O que faz uma implementação correta. Transfere apenas os preços que vigoraram, com datas e moeda.

#Dados estruturados substituídos pelo número do histórico

De onde vem. A implementação põe o preço mais baixo dos 30 dias no JSON-LD do produto em vez do preço promocional ou do preço de tabela do WooCommerce. O motor de pesquisa vê então um preço diferente daquele que o cliente paga.

Como detetar. Abra o código-fonte da página de um produto em promoção e procure o bloco application/ld+json. O campo price da oferta tem de ser igual ao preço que o cliente paga.

O que faz uma implementação correta. Acrescenta o preço mais baixo ao lado do preço promocional e do preço de tabela, que ficam inalterados.

#Prefixo técnico no carrinho

De onde vem. O WooCommerce mostra os dados dos itens do carrinho no formato “rótulo: valor”. Se a informação do preço mais baixo chega lá com uma chave técnica, o cliente vê, por exemplo, o prefixo “Omnibus:”.

Como detetar. Adicione um produto em promoção ao carrinho e leia o que aparece por baixo do nome do item.

O que faz uma implementação correta. Mostra uma frase que se percebe sem conhecer o plugin.

#Limpeza do histórico que deixa de funcionar depois de uma atualização

De onde vem. A tarefa diária que corta o histórico só é agendada quando o plugin é ativado. Uma atualização sem nova ativação deixa-a por agendar.

Como detetar. No WooCommerce, abra WooCommerce > Estado > Acções agendadas (ou a lista de tarefas do WP-Cron) e verifique se a tarefa do plugin Omnibus está agendada.

O que faz uma implementação correta. Verifica o agendamento depois de cada atualização e volta a agendar a tarefa se ela faltar.

#Quadro-resumo

ArmadilhaSintoma na lojaComo verificar
Promoção agendada gravada logoPreço mais baixo igual ao promocional desde o primeiro diaPromoção para amanhã, verificação depois do início
Janela contada a partir de hojeAo fim de alguns dias, o preço mais baixo desce para o promocionalO mesmo produto no 1.º e no 10.º dia da promoção
Falta o preço anterior à janelaSem informação ou preço promocional como o mais baixoRedução de um produto com preço estável há mais de 30 dias
Moeda ignorada na consultaPreço mais baixo noutra moeda que o preço de vendaMudança de moeda num produto em promoção
Imposto ignoradoPreço mais baixo inferior no valor do IVALoja com preços sem IVA no painel e com IVA na montra
Variações ignoradasSem informação depois de escolher a variaçãoProduto variável com promoção numa variação
Grelhas Product CollectionSem informação na página inicial e nos produtos relacionadosBloco Product Collection com produto em promoção
Modelo Elementor ProSem informação na ficha do produtoProduto em promoção numa ficha do Elementor
Importação do plugin antigoPreço mais baixo de uma promoção que nunca começouComparação do histórico antes e depois da importação
JSON-LD substituídoPreço nos dados estruturados diferente do da páginaCódigo-fonte da página, campo price
Limpeza por agendarO histórico cresce sem fimLista de ações agendadas

#Como o fazem os nossos plugins

Desenvolvemos dois plugins WooCommerce com suporte Omnibus: o Shoplex, pensado para a conformidade das lojas com o direito da UE, e o Polski for WooCommerce, feito para lojas polacas. Ambos gravam a promoção agendada só quando o WooCommerce a ativa, e ambos avisam quando a janela é definida com menos de 30 dias. As opções “hoje” e “mostrar o preço atual como o mais baixo” são assinaladas como não conformes com o artigo 6.º-A, n.º 2, da Diretiva 98/6/CE.

Ficha de produto numa loja de demonstração com o plugin Shoplex: preço de 18,00 EUR riscado, preço promocional de 13,50 EUR, preço unitário e informação do preço mais baixo dos últimos 30 dias, 16,00 EUR

Ficha de produto numa loja de testes com o Shoplex (interface em inglês). O preço mais baixo dos 30 dias (16,00 EUR) aparece por baixo do preço promocional, na mesma moeda, junto com o preço unitário. O exemplo mostra também uma regra deste artigo: o preço mais baixo da janela não tem de ser igual ao preço riscado.

O Polski for WooCommerce grava ainda a moeda em cada registo do histórico e calcula o mínimo na moeda em que o cliente vê o produto. Considera o preço em vigor no momento em que a janela abre e as alterações de preço dentro do mesmo dia. Mostra a informação de acordo com as definições de impostos do WooCommerce, nas variações dos produtos variáveis, nas grelhas Product Collection dos temas de blocos e nas fichas de produto feitas com modelos do Elementor Pro. Nos dados estruturados, acrescenta o preço mais baixo ao lado do preço promocional e do preço de tabela. Tem uma definição própria para produtos sem histórico e consegue importar o histórico de preços gravado pelo plugin Omnibus da iworks.

#Em que outros sítios a loja mostra uma redução?

A diretiva abrange qualquer anúncio de redução de preço, e o decreto-lei exige que a indicação seja inequívoca. No WooCommerce, o preço riscado aparece em muitos sítios, e cada um é desenhado por código diferente.

Temas de blocos. O arquivo da loja, a página inicial, os produtos relacionados e as sugestões de venda cruzada do carrinho são, num tema de blocos, blocos separados. Um plugin escrito para os hooks clássicos trata do arquivo, e as outras grelhas ficam sem informação. Se está a passar a loja para um tema de blocos, verifique cada uma separadamente. As diferenças entre temas clássicos e de blocos estão no artigo sobre temas clássicos e block themes.

Construtores de páginas. O Elementor Pro, tal como outros construtores com modelos próprios de ficha de produto, substitui os hooks padrão do WooCommerce. A informação tem de estar ligada ao sítio que o construtor usa, ou ao próprio preço.

Carrinho e resumo da encomenda. Se o carrinho mostra um preço riscado, mostra uma redução. O texto da informação deve ser legível para o cliente, sem nomes técnicos.

Dados estruturados. Os dados do produto em JSON-LD são lidos pelo motor de pesquisa, e é deles que saem os resultados com preço. O campo price da oferta deve continuar a ser o preço de venda que o cliente paga. O preço mais baixo dos 30 dias não substitui o preço promocional nem o preço de tabela.

Tabelas de preços por quantidade e preços por grupo. Uma loja com preços que dependem da quantidade ou do perfil do cliente tem vários preços em simultâneo para o mesmo produto. Antes de escolher um plugin Omnibus, verifique que preço ele trata como preço ativo e se o preço de um grupo de clientes entra no histórico. A arquitetura destes preços está descrita no artigo sobre preços escalonados e unitários no WooCommerce B2B.

Publicidade com preço. Uma faixa promocional no site com o preço reduzido de um produto concreto, ou uma newsletter com o preço promocional, são conteúdos preparados fora da ficha do produto. O artigo 4.º, n.º 6, deixa de fora as declarações gerais de redução, mas quando a peça mostra o preço reduzido de um produto, o número do histórico tem de ser levado para lá à mão ou por integração.

Página da campanha. O artigo 4.º, n.º 1, pede também a modalidade de venda, a data de início e a duração. Se a campanha tem uma página própria ou uma faixa no topo da loja, é o sítio natural para essa informação, e as datas devem coincidir com as datas de início e fim definidas na promoção agendada do WooCommerce.

#Como mudar de plugin Omnibus sem perder o histórico de preços?

O histórico de preços é a única prova de que preço vigorava antes da redução, e em Portugal é a prova que a lei pede à loja. Mudar de plugin sem importar o histórico apaga-o, e a loja volta durante 30 dias à situação “sem histórico”.

Antes da mudança, verifique três coisas:

  1. Se o plugin novo importa o histórico do atual. O Polski for WooCommerce importa o histórico do plugin Omnibus da iworks. Para outros pares de plugins, consulte a documentação ou peça ao programador um script de migração.
  2. O que é importado exatamente. A importação deve transferir os preços que vigoraram, com datas e moeda. O campo bruto do preço promocional não chega, porque inclui também promoções apenas agendadas.
  3. Como se comporta o plugin novo sem histórico. Para os produtos que a importação não cobriu, o plugin usa a definição para o caso sem histórico. Veja o que mostra nessa situação antes de lançar reduções.

A ordem mais segura é: cópia de segurança da base de dados, instalação do plugin novo ao lado do antigo, importação, comparação dos preços mais baixos em alguns produtos nos dois plugins e só depois desativação do antigo. Se os dois históricos derem números diferentes para o mesmo produto, descubra a causa antes de desativar o antigo, porque depois já não terá com que comparar. Guarde também uma exportação do histórico antigo: se um dia tiver de provar o preço de uma campanha anterior à mudança, é esse ficheiro que o demonstra.

#Como verificar se a sua loja mostra o preço mais baixo correto?

O teste abaixo demora cerca de uma hora numa cópia da loja (staging). Os números são ilustrativos, e cada passo diz qual é o resultado correto.

  1. Promoção agendada. Escolha um produto com o preço 100, que não muda há mais de 30 dias. Agende uma promoção de 80 com início amanhã. Hoje, a ficha do produto não pode mostrar nem o preço 80 nem a informação do preço mais baixo. Amanhã, depois do início da promoção, a informação tem de mostrar 100.
  2. Produto de preço estável. Se não quiser esperar por amanhã, escolha outro produto com o preço estável há 40 dias e baixe-o já. O preço mais baixo dos 30 dias é o preço antigo. O preço promocional ou a ausência de informação nesse lugar é um erro.
  3. Janela presa ao início. Ao fim de alguns dias de promoção, volte ao produto do passo 1. A informação tem de continuar a mostrar 100.
  4. Alteração dentro do dia. Num produto de teste, baixe o preço durante uma hora e reponha-o. Depois lance uma nova promoção. O preço mais baixo tem de refletir essa redução de uma hora.
  5. Produto variável. Ponha uma promoção numa variação de um produto variável. Ao escolher essa variação, a informação do preço mais baixo tem de aparecer com o preço da variação. Ao escolher uma variação sem promoção, a informação tem de desaparecer.
  6. Moeda. Se a loja usa um plugin multimoeda, mude a moeda num produto em promoção. O preço mais baixo tem de estar na mesma moeda que o preço de venda.
  7. Impostos. Compare o preço mais baixo com o preço de venda numa configuração em que a loja introduz preços sem IVA e os mostra com IVA. Os dois números têm de incluir o imposto da mesma forma.
  8. Página inicial e outras grelhas. Coloque um produto em promoção num bloco Product Collection na página inicial e depois veja os produtos relacionados e as sugestões de venda cruzada do carrinho. Junto a cada preço riscado tem de estar a informação, e só uma vez.
  9. Modelo do construtor. Se a ficha de produto vem do Elementor Pro ou de outro construtor, verifique um produto em promoção nessa ficha.
  10. Carrinho. Adicione um produto em promoção ao carrinho. A informação tem de ser uma frase para o cliente, sem prefixos técnicos.
  11. Dados estruturados. Abra o código-fonte da página de um produto em promoção ou o teste de resultados avançados da Google. O preço da oferta tem de ser igual ao preço promocional.
  12. Tarefa de limpeza. Abra WooCommerce > Estado > Acções agendadas e verifique se a tarefa do plugin Omnibus está agendada. Depois de ela correr, repita o passo 2: o registo anterior à janela tem de sobreviver.
  13. Definições. Confirme que a janela tem 30 dias e que nenhuma opção manda mostrar o preço atual como o mais baixo.

Guarde o resultado do teste com data e capturas de ecrã. Num regime em que a prova documental cabe à loja, este registo é útil por si só. Se a loja mudar de tema, de construtor ou de plugin de preços, repita o teste, porque qualquer destas mudanças pode levar o preço para um sítio que o plugin não trata.

#O que fazer quando o teste encontra um erro?

Se o erro está nas definições (janela inferior a 30 dias, opção que mostra o preço atual), corrige-o no painel do plugin. Se está na apresentação (sem informação numa grelha de blocos, num modelo do construtor ou no carrinho), em regra basta atualizar o plugin ou fazer uma pequena alteração no tema. Se está no próprio histórico (promoções gravadas antes do início, falta do preço anterior à janela, moeda ignorada), a correção exige mudanças na lógica de registo e, muitas vezes, a limpeza do histórico recolhido com erros.

Um histórico errado não se corrige sozinho com a atualização do plugin. Os registos de promoções gravadas antes do início ficam na base de dados e continuam a baixar o mínimo até alguém os apagar ou até saírem da janela. Depois de cada correção da lógica, reveja o histórico dos produtos que nos últimos 30 dias tiveram promoções agendadas. Se apagar registos errados, documente o que apagou e porquê, para que o histórico continue a servir de prova.

Seguimos a mesma abordagem noutras obrigações de consumo da loja, por exemplo no botão de livre resolução: a lei descreve o resultado, e a loja tem de o construir com dados que o WooCommerce não recolhe por si. Uma visão geral de outros plugins para a loja está na lista de plugins WooCommerce.

Se quer que verifiquemos o histórico de preços da sua loja, que o transfiramos de outro plugin ou que construamos o suporte Omnibus para um tema de blocos, um construtor de páginas ou preços por grupo de clientes, escreva-nos através da página de desenvolvimento WooCommerce. Começamos pelo teste deste artigo numa cópia da sua loja e definimos o âmbito do trabalho depois do resultado.

Última atualização: 27 de outubro de 2026.

Próximo passo

Transforme o artigo numa implementação real

Este bloco reforça a ligação interna e conduz o leitor para o passo seguinte mais útil dentro da arquitetura do site.

Quer implementar isto no seu site?

Se a visibilidade no Google e em sistemas de IA importa, posso estruturar conteúdo, FAQ, schema e linkagem interna para SEO, GEO e AEO.

Cluster relacionado

Explorar outros serviços WordPress e base de conhecimento

Reforce o seu negócio com suporte técnico profissional em áreas-chave do ecossistema WordPress.

Perguntas frequentes

Respostas práticas para aplicar o tema na execução real.

O WooCommerce mostra sozinho o preço mais baixo dos últimos 30 dias?#
Não. O WooCommerce guarda apenas o preço normal atual, o preço promocional e as datas da promoção agendada. Não regista que preço vigorava antes, por isso não há dados para calcular o preço mais baixo de 30 dias. É preciso um plugin ou código próprio que, a partir do dia da instalação, grave o histórico das alterações de preço.
A partir de quando se contam os 30 dias numa promoção agendada?#
A partir do dia em que a redução passa a ser aplicada. O artigo 3.º, n.º 2, alínea a), do Decreto-Lei n.º 70/2007 fala nos 30 dias consecutivos anteriores à aplicação da redução. A data em que o produto foi gravado no painel não conta. Uma promoção agendada para a próxima semana não pode entrar no histórico no momento em que é gravada, porque se tornaria o preço mais baixo antes de alguém poder comprar a esse preço.
Quem tem de provar o preço mais baixo anterior?#
A loja. O artigo 5.º, n.º 5, do Decreto-Lei n.º 70/2007 diz que incumbe ao operador económico a prova documental do preço mais baixo anteriormente praticado. Numa loja WooCommerce, essa prova é o histórico de preços com datas, por isso convém não o apagar nem deixá-lo com falhas.
Uma redução que aumenta por etapas conta como várias reduções?#
Não, se o aumento da redução for gradual e ininterrupto. O artigo 4.º, n.º 5, considera que nesse caso o preço mais baixo anteriormente praticado é o preço antes da primeira redução. Se a campanha for interrompida e o preço voltar a subir, a nova redução tem a sua própria janela de 30 dias.

Precisa de FAQ adaptado ao setor e mercado? Criamos uma versão alinhada com os seus objetivos de negócio.

Fale connosco

Artigos Relacionados