Dynamic Pricing Engine: guia completo
Guia completo: instalação, 4 tipos de regras, segmentos, recolha de preços da concorrência, testes A/B e salvaguardas em 3 níveis.
Bem-vindo à documentação completa do Dynamic Pricing Engine, o motor de preços dinâmicos para WooCommerce editado pela DataFirefly. Este guia cobre a instalação, a configuração inicial, cada tipo de regra, a segmentação de clientes, a recolha de preços da concorrência, os testes A/B, o registo, as salvaguardas e a desinstalação.
Requisitos: WordPress 6.0+, WooCommerce 8.0+, PHP 7.4+. Compatível com HPOS e com os blocos de Checkout.
Instalação
Carregamento do plugin
- No back-office do WordPress, vá a Plugins → Adicionar → Carregar plugin.
- Selecione o ficheiro
dfdynamicpricing.zipe clique em Instalar agora. - Terminada a instalação, clique em Ativar plugin.
O que acontece na ativação
O plugin cria 6 tabelas personalizadas (com prefixo wp_dfdpe_):
wp_dfdpe_rules: as regras de preçowp_dfdpe_logs: o registo dos ajusteswp_dfdpe_segments: os segmentos de clientes (3 criados automaticamente)wp_dfdpe_competitors: o seguimento da concorrênciawp_dfdpe_ab_tests: os testes A/Bwp_dfdpe_ab_events: os eventos de exposição, adição ao carrinho e conversão
São também agendadas duas tarefas cron: a recolha de preços da concorrência (horária por predefinição) e a limpeza do registo (diária).
Menu de administração
Aparece um novo menu Dynamic Pricing na barra lateral, com 7 submenus: Painel, Regras, Segmentos, Concorrentes, A/B Testing, Registo e Definições. Todas as ações exigem a permissão do WordPress manage_woocommerce.
Configuração inicial (Definições)
Antes de criar a primeira regra, dê uma volta rápida por Dynamic Pricing → Definições para ajustar os parâmetros globais.
Registo
- Ativar o registo: assinalado por predefinição. Cada ajuste é guardado com produto, regra, cliente e contexto.
- Retenção (dias): 60 dias por predefinição. A limpeza automática corre diariamente.
O registo está limitado a 1 entrada por sessão, produto e hora, para evitar a saturação. Pode desativá-lo por completo se não o usar.
Salvaguardas globais
- Preço mínimo (% do preço inicial): por exemplo, 70 = nunca descer abaixo de 70% do preço inicial. 0 = desativado.
- Preço máximo (% do preço inicial): por exemplo, 130 = nunca ultrapassar 130%. 0 = desativado.
- Nunca vender abaixo do custo de compra: a ativar se guardar o custo numa meta de produto.
- Chave meta do custo de compra:
_costpor predefinição (compatível com o WooCommerce Cost of Goods).
Recolha da concorrência
- Frequência de execução: horária, duas vezes por dia ou diária. A recolha trata 25 URL por lote.
Apresentação no front-office
- Apresentar o preço inicial riscado: útil para um efeito promocional visível. A desativar em testes A/B confidenciais.
Criar a sua primeira regra
Vá a Dynamic Pricing → Regras → Adicionar. Cada regra tem os mesmos campos base, seja qual for o tipo.
Campos comuns
- Nome: designação interna, útil no registo (por exemplo «Happy hour 18h-20h»).
- Tipo: Hora, Stock, Segmento de cliente ou Concorrente.
- Estado: Ativa ou Inativa. Uma regra inativa nunca é avaliada.
- Prioridade: as regras são executadas por ordem crescente de prioridade. Cada regra trabalha sobre o resultado da anterior.
- Âmbito: Global, Categoria, Etiqueta ou Produto específico.
- Ajuste: Percentagem, Montante fixo, Valor definido ou Alinhamento com a concorrência (apenas com o tipo Concorrente).
- Mínimo / Máximo: salvaguardas opcionais ao nível da regra.
- Janela de datas: datas de início e de fim para tornar a regra ativa apenas durante um determinado período.
- Teste A/B: ligação opcional a um teste A/B e à sua variante (ver a secção A/B Testing).
Conselho de priorização: comece pelas regras mais amplas (globais) com prioridade baixa, e depois afine com regras dirigidas de prioridade mais alta. As salvaguardas globais configuradas nas Definições aplicam-se sempre em último lugar.
Tipo 1: regra por hora
Ajusta o preço conforme a hora e o dia da semana. Ideal para o efeito happy hour, as promoções de fim de semana ou os preços noturnos.
Condições disponíveis
- Dias da semana: selecione um ou vários dias (segunda a domingo, formato ISO).
- Hora de início / Hora de fim: no formato de 24 horas. Os intervalos que atravessam a meia-noite são geridos automaticamente (por exemplo 22h-02h).
- Fuso horário: site (por predefinição, usa o fuso do WordPress) ou um fuso específico (por exemplo
Europe/Lisbon).
Exemplos concretos
- Happy hour: −15%, quinta e sexta-feira, 18h-20h, fuso Europe/Lisbon.
- Promoção de fim de semana: −10%, sábado e domingo, 00h-23h59.
- Preço noturno: +5%, todos os dias, 22h-06h (atravessa a meia-noite, gerido automaticamente).
Tipo 2: regra por stock
Ajusta o preço conforme o nível de stock do produto. Útil para escoar rapidamente os produtos em excesso ou valorizar os que se tornam raros.
Condições disponíveis
- Operador: <, <=, ==, >=, >.
- Limiar: número inteiro.
- Modo: Absoluto (número de unidades) ou Percentagem do stock inicial (exige a meta
_initial_stockdefinida no produto).
Exemplos concretos
- Escoamento: stock >= 50 (excesso) → −20%.
- Raridade: stock < 5 → +10%.
- Percentagem do stock inicial: modo percentagem, stock < 20% do stock inicial → −5%.
Para usar o modo Percentagem, acrescente um campo meta _initial_stock aos seus produtos (através do WP All Import, do ACF, ou de um simples update_post_meta). Sem essa meta, o modo percentagem é ignorado.
Tipo 3: regra por segmento de cliente
Aplica um ajuste apenas aos clientes que pertencem a um ou vários segmentos definidos.
Condições disponíveis
- Segmentos: um ou vários segmentos existentes (ver a secção Segmentos).
- Correspondência: Any (o cliente pertence a pelo menos um segmento) ou All (pertence a todos).
Exemplos concretos
- Fidelidade: segmento loyal-customers, ajuste de −10%.
- Reconquista: segmento dormant (a criar), ajuste de −20% durante 7 dias.
- B2B: segmento b2b (perfil
wholesale), ajuste de −25%.
Tipo 4: regra por preço da concorrência
Alinha o seu preço pelo de um concorrente que tenha configurado na secção Concorrentes. Três estratégias disponíveis.
Estratégias
- Match: o seu preço passa a ser exatamente o preço do concorrente.
- Undercut: o seu preço fica abaixo do concorrente, em percentagem ou em montante fixo.
- Overprice: o seu preço fica acima do concorrente (posicionamento premium).
Condições disponíveis
- Modo: Percentagem ou Montante fixo.
- Montante: percentagem (por exemplo 5 para 5%) ou montante na moeda.
- Idade máxima dos dados (horas): acima disso, os dados da recolha são considerados demasiado antigos e a regra passa ao comportamento de recurso.
- Recurso: comportamento se os dados da concorrência estiverem indisponíveis (por exemplo, aplicar um ajuste neutro ou saltar a regra).
Exemplo concreto
Undercut de 3% face ao concorrente A, com idade máxima de 6 horas. Se o concorrente A não for recolhido há 6 horas, a regra é ignorada e o preço mantém-se inalterado.
Segmentos de clientes
Um segmento é uma combinação de critérios que define um grupo de clientes. Depois de criado, um segmento pode ser visado por uma regra do tipo Segmento de cliente.
Segmentos criados na ativação
- new-customers: clientes com 0 ou 1 encomenda.
- loyal-customers: clientes com 5 ou mais encomendas.
- vip: clientes que gastaram pelo menos 500 €.
Criar um segmento
A partir de Dynamic Pricing → Segmentos → Adicionar, defina:
- Nome e Slug (gerado automaticamente se ficar vazio).
- Descrição (opcional, para a sua equipa).
- Critérios: acrescente tantas linhas quantas forem necessárias. Todos os critérios têm de ser satisfeitos (E lógico).
- Estado: ativo ou inativo.
Campos disponíveis para os critérios
order_count: número de encomendas do cliente.total_spent: total gasto (na moeda do site).is_guest: 1 se o visitante não tiver sessão iniciada, 0 caso contrário.user_roles: perfis WordPress do cliente (por exemplocustomer,subscriber,wholesale).days_since_last_order: dias decorridos desde a última encomenda.
Operadores disponíveis
Dez operadores: ==, !=, >, >=, <, <=, in, not_in, contains, not_contains.
Para in e not_in, separe os valores por vírgulas no campo Valor (por exemplo customer,subscriber).
Exemplo avançado, segmento «Reconquista»: order_count >= 2 mais days_since_last_order >= 60. Visa os antigos clientes que não encomendam há 2 meses.
Concorrentes (recolha de preços)
A recolha obtém automaticamente o preço apresentado numa página de produto de um concorrente, com uma frequência configurável. Os preços obtidos são depois usados pelas regras do tipo Concorrente.
Acrescentar um concorrente
A partir de Dynamic Pricing → Concorrentes → Adicionar:
- Produto WooCommerce (ID): o ID do produto local ao qual associar o seguimento.
- Nome do concorrente: designação livre (por exemplo «Amazon», «Worten»).
- URL: a página de produto do concorrente a recolher.
- Tipo de seletor: CSS, XPath, Regex ou JSON-LD.
- Seletor: o seletor que aponta para o preço (ver exemplos mais abaixo).
- Moeda: por predefinição, a moeda WooCommerce do site.
- Estado: seguimento ativo ou em pausa.
Tipos de seletores
- CSS: seletor CSS clássico. Exemplos:
.price .amount,#product-price,span[itemprop=price]. - XPath: expressão XPath. Exemplo:
//span[@class="price"]. - Regex: expressão regular PHP. Exemplo:
/€s*([d,.]+)/, sendo usado o primeiro grupo capturado. - JSON-LD: deteção automática de Schema.org. Procura
price,offers.priceeoffers.lowPricenas etiquetas JSON-LD. Deixe o campo Seletor vazio.
Interpretação dos preços
A recolha trata automaticamente os formatos europeus (1 299,90) e americanos (1,299.90). Os símbolos de moeda e os espaços são limpos.
Execução manual
O botão Recolher agora ao lado de cada concorrente força uma atualização imediata em AJAX. Útil para testar um novo seletor.
Estados possíveis
- pending: nunca recolhido, à espera do próximo cron.
- ok: última execução bem-sucedida.
- error: última execução com falha (mensagem guardada no campo last_error).
Respeito pelos termos de utilização dos concorrentes: a recolha faz um pedido HTTP simples com um tempo limite curto, mas compete-lhe verificar que a recolha é permitida pelos Termos e Condições de Utilização dos sites visados. Algumas jurisdições regulam esta prática.
A/B Testing
O módulo A/B integrado permite comparar várias estratégias de preço no mesmo produto e medir o respetivo impacto em tempo real (exposições, adições ao carrinho, conversões, RPV).
Criar um teste
A partir de Dynamic Pricing → A/B Testing → Novo teste:
- Nome e slug.
- Variantes: lista de designações separadas por vírgulas. Por predefinição
A,B. - Repartição do tráfego: peso relativo por variante (normalizado automaticamente). Por exemplo
50/50,70/30, ou1/1/1para três variantes distribuídas por igual. - Estado: Rascunho, Em curso, Em pausa ou Terminado. Só um teste Em curso atribui visitantes.
- Janela: datas opcionais de início e de fim.
Ligar uma regra a uma variante
No formulário de uma regra, selecione o teste A/B e a variante visada. A regra só se aplica aos visitantes atribuídos a essa variante em concreto.
Como funciona a atribuição
Na primeira exposição, o plugin atribui o visitante a uma variante conforme os pesos configurados e guarda essa escolha num cookie dfdpe_ab. Um cookie de sessão distinto dfdpe_sid permite seguir o mesmo visitante ao longo de toda a sessão, com ou sem sessão iniciada.
Eventos acompanhados
- exposure: primeira vez que o visitante vê um preço afetado pelo teste.
- atc: adição ao carrinho (hook
woocommerce_add_to_cart). - conversion: encomenda finalizada (hook
woocommerce_thankyou). O montante total da encomenda é registado.
Métricas calculadas (página Resultados)
- Exposições e Sessões únicas.
- CR ATC: taxa de adição ao carrinho (ATC a dividir pelas exposições).
- CR Conv.: taxa de conversão (conversões a dividir pelas exposições).
- Receita: total das conversões.
- RPV: receita por visitante (receita a dividir pelas exposições). É a métrica-chave de decisão: a variante com o RPV mais elevado é destacada automaticamente (distintivo Vencedora).
Boa prática: deixe um teste a correr pelo menos 2 semanas antes de concluir. Um teste A/B fiável exige vários milhares de exposições para haver significância estatística.
Registo dos ajustes
Cada ajuste de preço aplicado no front-office pode ser registado. O registo está acessível em Dynamic Pricing → Registo.
Informações guardadas
- Data e hora.
- Produto e variação.
- Regra acionada (ID).
- Cliente (ID) ou sessão anónima.
- Preço inicial, preço final e montante do ajuste.
- Teste A/B e variante (quando aplicável).
- Contexto:
frontend,cart,checkout.
Filtros disponíveis
Pode filtrar por ID de produto, ID de regra ou ID de teste A/B. A paginação apresenta 50 entradas por página.
Limite de escrita
Para evitar a saturação, o plugin limita o registo a 1 entrada por sessão, produto e hora. Uma sessão que consulte 100 vezes a mesma ficha de produto na mesma hora gera apenas uma linha.
Limpeza automática
Uma tarefa cron diária (dfdpe_cron_purge_logs) elimina as entradas mais antigas do que a retenção configurada (60 dias por predefinição).
Salvaguardas: como funcionam
Três níveis de proteção sucessivos impedem que o seu preço final atinja um valor perigoso.
Nível 1: salvaguardas por regra
Cada regra pode definir o seu próprio mínimo e máximo. Aplicam-se imediatamente após o ajuste dessa regra. Útil para limitar os efeitos de uma regra em concreto (por exemplo «a happy hour nunca pode descer abaixo de 30 €, seja qual for o preço inicial»).
Nível 2: salvaguardas globais
Definidas nas Definições, em percentagem do preço inicial:
- Preço mínimo: o preço final não pode descer abaixo desta percentagem.
- Preço máximo: o preço final não pode ultrapassar esta percentagem.
Exemplo: mínimo a 70% e máximo a 130%. Um produto de 100 € nunca poderá descer abaixo de 70 € nem ultrapassar 130 €, sejam quais forem as regras aplicadas.
Nível 3: proteção do custo de compra
Se estiver ativa nas Definições, esta proteção impede o preço final de descer abaixo do valor da meta _cost (ou da chave personalizada que configurar). É a garantia final para nunca vender com prejuízo.
Os três níveis são cumulativos e aplicam-se por esta ordem: regra, global, custo. O preço final é sempre o resultado mais «protegido» dos três.
Compatibilidade com HPOS e cache
HPOS (High-Performance Order Storage)
O plugin declara a compatibilidade com custom_order_tables e cart_checkout_blocks logo na inicialização. Não é necessária qualquer ação adicional se tiver o HPOS ativo no WooCommerce.
Cache dos preços das variações
O WooCommerce coloca em cache os preços mínimo e máximo dos produtos variáveis através de um hash. O plugin injeta uma semente dinâmica (utilizador, sessão e intervalo de 5 minutos) nesse hash através do filtro woocommerce_get_variation_prices_hash, o que força o WooCommerce a recalcular os preços no momento certo sem estragar a cache para os restantes visitantes.
FAQ
Posso combinar várias regras no mesmo produto?
Sim. As regras são executadas por ordem de prioridade, trabalhando cada uma sobre o resultado da anterior. Pode assim encadear «−10% VIP» e depois «máximo a 130% do custo».
As regras aplicam-se também ao carrinho e ao checkout?
Sim. Um hook em woocommerce_before_calculate_totals recalcula os preços das linhas do carrinho a cada apresentação.
O plugin é compatível com as caches de servidor (Redis, Varnish)?
Sim, mas se a sua cache for muito agressiva ao nível da página completa, os preços apresentados podem ser os que estão em cache. Para uma apresentação dinâmica fiável, exclua as páginas de produto da cache de página completa, ou use fragmentos ESI.
Posso desativar o plugin sem perder as minhas regras?
Sim. A desativação não elimina qualquer dado. Só a desinstalação através de Plugins → Eliminar aciona o script uninstall.php.
Como exporto os meus dados?
Todos os dados estão guardados nas 6 tabelas wp_dfdpe_*. Pode exportá-los através do phpMyAdmin, do WP-CLI (wp db export), ou de qualquer ferramenta de cópia de segurança do WordPress.
Desinstalação
Para desinstalar por completo:
- Desative o plugin em Plugins.
- Clique em Eliminar.
O script uninstall.php elimina então:
- As 6 tabelas
wp_dfdpe_*. - As 9 opções do WordPress criadas.
- As tarefas cron agendadas.
A desinstalação é definitiva e irreversível. Faça uma cópia de segurança das suas regras, segmentos e registo antes, se quiser poder voltar atrás.
Suporte
A sua licença inclui 12 meses de suporte e de atualizações. Para qualquer questão, contacte-nos em datafirefly.com/contact.