Glossário

O que é WP-Cron?

8 de fevereiro de 2026 Atualizado em 19 de abr. de 2026

O WordPress tem seu próprio agendador de tarefas integrado chamado WP-Cron. Ele lida com tudo o que precisa acontecer em um cronograma: publicar posts em um horário definido, verificar atualizações, enviar notificações por e-mail, limpar lixo do banco de dados, executar tarefas de segundo plano de plugins. Parece razoável — até você perceber como ele realmente funciona. Diferente de um sistema cron real que roda em um cronômetro fixo, o WP-Cron só dispara quando alguém visita seu site. Sem visitantes, sem cron. E essa decisão de design leva a todo um conjunto de problemas.

Como o WP-Cron é Disparado

Toda vez que uma página é carregada em seu site WordPress, o WordPress verifica uma lista de eventos agendados. Se algum deles estiver atrasado, ele os dispara durante esse carregamento de página. O visitante que disparou a verificação não vê nada diferente — as tarefas cron rodam em segundo plano (mais ou menos). Mas o importante a entender é: não há nenhum processo independente tiquetaqueando. Todo o sistema de agendamento depende do tráfego HTTP de entrada.

Esta foi uma escolha pragmática. O WordPress foi projetado para rodar em hospedagem compartilhada barata, onde você não pode instalar serviços de sistema ou acessar o crontab. A abordagem baseada em tráfego garantiu que as tarefas agendadas funcionariam de imediato, em qualquer hospedagem, sem nenhuma configuração de servidor.

Onde Isso Falha

O design dependente de tráfego tem problemas óbvios que se tornam mais dolorosos à medida que seu site cresce — ou, paradoxalmente, quando não cresce o suficiente:

  • Sites de baixo tráfego perdem o cronograma. Se o seu site recebe 10 visitas por dia, posts agendados podem ser publicados horas depois. Um post definido para as 8:00 da manhã não estará realmente no ar até que alguém visite o site após as 8:00 — o que pode ser meio-dia se seu público estiver em um fuso horário diferente. Processamento de pedidos do WooCommerce, agendamentos de backup e digestos de e-mail sofrem o mesmo destino.
  • Sites de alto tráfego desperdiçam recursos. Em um site movimentado, o WP-Cron é disparado em quase todo carregamento de página. O WordPress verifica a lista de eventos, avalia timestamps e — na maioria das vezes — não encontra nada para fazer. Isso é computação desperdiçada em cada requisição. Pior, múltiplos visitantes simultâneos podem disparar a mesma verificação cron ao mesmo tempo, levando a condições de corrida onde a mesma tarefa é executada duas vezes.
  • Tarefas de longa duração desaceleram os carregamentos de página. Quando o WP-Cron dispara, as tarefas são executadas como parte da requisição da página. O WordPress tenta gerar uma requisição separada em segundo plano para o trabalho cron real, mas em algumas configurações de servidor isso falha silenciosamente, e as tarefas rodam inline. Um plugin de backup gerando um dump de banco de dados de 500 MB pode bloquear o carregamento da página de um visitante se a conexão de loopback não funcionar corretamente.
  • O desvio do cron se acumula. Como os eventos só rodam quando disparados pelo tráfego, o tempo é aproximado na melhor das hipóteses. Uma tarefa agendada para cada hora pode rodar às 1:00, 2:17, 3:02, 4:45 — sempre que ocorrer a próxima visita após o horário agendado.

O Que o WP-Cron Realmente Gerencia

Você pode se surpreender com o quanto depende deste sistema:

  • Publicar posts e páginas agendados em sua data e hora definidas
  • Verificar atualizações do núcleo do WordPress, plugins e temas
  • Processar tarefas de segundo plano do WooCommerce (alterações de status de pedido, vendas agendadas, gerenciamento de estoque)
  • Executar plugins de backup automatizados (UpdraftPlus, BackWPup, BlogVault)
  • Enviar campanhas de e-mail agendadas ou digestos
  • Limpar transientes expirados, posts na lixeira e histórico de revisões
  • Processar tarefas em fila de plugins de formulário, plugins de associação e plugins LMS
  • Renovar certificados SSL Let's Encrypt (em hospedagens que lidam com isso via WordPress)

Se o WP-Cron é não confiável, todos esses se tornam não confiáveis.

A Solução: Substituir o WP-Cron por um Cron de Sistema Real

A recomendação padrão para qualquer site que leve o agendamento a sério é desabilitar o disparo baseado em tráfego e substituí-lo por um trabalho cron de sistema real. Este é um processo de duas etapas:

Passo 1: Adicione esta linha ao seu wp-config.php para impedir que o WordPress dispare o cron em cada carregamento de página:

define('DISABLE_WP_CRON', true);

Passo 2: Configure um trabalho cron de sistema para chamar o wp-cron.php em um intervalo fixo. A maioria dos painéis de controle de hospedagem (cPanel, Plesk) tem um gerenciador de trabalhos cron, ou você pode usar crontab -e em um servidor que você controla:

# Chamar o WP-Cron a cada 5 minutos via wget
*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

# Alternativa usando curl
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

# Alternativa usando WP-CLI (recomendado para chamadas locais, evita sobrecarga HTTP)
*/5 * * * * cd /var/www/html && wp cron event run --due-now >/dev/null 2>&1

A abordagem WP-CLI é a mais limpa porque não envolve uma requisição HTTP. Ela executa os eventos cron diretamente via PHP, o que evita problemas com conexões de loopback, timeouts HTTP e autenticação (por exemplo, autenticação básica HTTP em sites de staging).

Hospedagem Gerenciada e WP-Cron

Muitas hospedagens WordPress gerenciadas (Kinsta, WP Engine, Cloudways, SiteGround) desabilitam o comportamento padrão do WP-Cron e o substituem por um cron do lado do servidor automaticamente. Se você está em hospedagem gerenciada, verifique a documentação deles — você pode não precisar fazer nada. Mas verifique se está realmente funcionando, porque algumas hospedagens definem um intervalo muito longo (a cada 30 minutos ou até a cada hora) que pode ser muito infrequente para suas necessidades.

Segurança: O Endpoint wp-cron.php

O arquivo wp-cron.php é acessível publicamente por padrão. Visitá-lo em um navegador dispara a verificação cron manualmente. Embora isso não exponha dados sensíveis, pode ser abusado: um atacante inundando o endpoint com requisições pode forçar tarefas cron intensivas em recursos a rodarem repetidamente, criando uma condição de negação de serviço.

Se você mudou para um cron de sistema, não há razão para o wp-cron.php ser acessível publicamente. Você pode bloquear o acesso externo através da configuração do seu servidor web enquanto ainda permite que o cron de sistema o chame localmente.

Depurando Problemas do WP-Cron

Se as tarefas agendadas não estão rodando como esperado, o plugin WP Crontrol é inestimável. Ele adiciona uma página ao admin do WordPress que mostra todos os eventos cron registrados, seu próximo horário de execução agendado e sua frequência. Você pode disparar manualmente qualquer evento, remover eventos travados ou adicionar novos agendamentos personalizados. É a primeira ferramenta a instalar ao diagnosticar problemas de cron.

Como o InspectWP Ajuda

O InspectWP verifica se o seu arquivo wp-cron.php é acessível publicamente. Se você mudou para um cron de sistema e desabilitou o WP-Cron integrado, o endpoint não deve ser acessível externamente. O relatório ajuda você a confirmar que sua configuração de cron está corretamente definida e que você não está deixando um endpoint desnecessário exposto.

Verifique seu site WordPress agora

O InspectWP analisa seu site WordPress em busca de problemas de segurança, problemas de SEO, conformidade com GDPR e desempenho — gratuitamente.

Analise seu site grátis