FernandoAcosta.Netdocs

Cache e atualização de dados

2 min de leituraAtualizado há 5 dias

Calcular os mais vendidos exige uma query agregada nos itens de pedido — não é coisa que se quer fazer em todo carregamento de página. Por isso o plugin cacheia o resultado por 24 horas usando WordPress Transients.

Como funciona o cache

A cada chamada do shortcode, o plugin gera uma chave de cache única a partir de todos os atributos passados:

best_selling_by_period_<hash>:1.2.2

Componentes:

  • best_selling_by_period_ — prefixo fixo.
  • <hash> — hash MD5 dos atributos (limit, columns, period, force, start_date, end_date).
  • :1.2.2 — versão atual do plugin. Quando o plugin é atualizado, todos os caches antigos ficam órfãos automaticamente — sem necessidade de limpar manualmente.

Implicações práticas

  • Cada combinação de atributos diferentes cria um cache próprio. Um shortcode com limit=12 e outro com limit=20 na mesma página são duas queries no primeiro acesso, depois servem do cache.
  • O cache expira sozinho após 24 horas (DAY_IN_SECONDS). No dia seguinte, a primeira visita reanima a query e refaz o ranking.
  • O ranking é estável durante o dia inteiro — bom pra evitar que a mesma vitrine fique trocando produtos a cada poucos minutos.
Quando o ranking muda

Para period="7day", 30day, month, year e custom, o ranking reflete o estado das vendas no momento em que o cache foi gerado. Atualizações intra-dia só aparecem após a expiração ou se você forçar refresh.

Forçando refresh

Quando precisar de dados quentes — testando uma campanha, validando após uma venda forte — passe force="true":

[best_selling_by_period period="month" force="true"]

Cada execução com force="true" ignora o cache existente, refaz a query e regrava o transient. Use esse atributo com moderação em páginas públicas: ele anula o ganho de performance.

Force só durante teste

Use force="true" enquanto valida o resultado, depois remova do shortcode em produção. Página de homepage com force="true" permanente faz a query rodar a cada visita.

Limpeza programática (devs)

Se quiser limpar o cache por código (por exemplo, num cron noturno ou após uma mudança grande de catálogo), basta apagar todos os transients com o prefixo do plugin:

global $wpdb;

$wpdb->query(
    "DELETE FROM {$wpdb->options}
     WHERE option_name LIKE '\_transient\_best\_selling\_by\_period\_%'
        OR option_name LIKE '\_transient\_timeout\_best\_selling\_by\_period\_%'"
);

Depois disso, a próxima chamada do shortcode reconstrói o cache.

Próximos passos

Foi útil?