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=12e outro comlimit=20na 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.
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.
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
- Como usar o shortcode — atributo
forceem contexto. - Personalizações para devs — alterar a duração do cache de 24h pra outro valor.