🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir o WP-Cron que não executa no WordPress

Time Full Services Time Full Services
Tipo Outros erros
Nome do erro WP-Cron não executa EN: WP-Cron not running
Severidade Atenção
Descrição O WP-Cron não executa quando o WordPress depende de visitas para disparar as tarefas agendadas, então posts agendados, backups e e-mails ficam parados em sites com pouco tráfego. A correção é desativar o WP-Cron interno e agendar um cron real do servidor para chamar o wp-cron.php em intervalos fixos.

O que é o WP-Cron que não executa?

O WP-Cron é o agendador interno do WordPress que executa tarefas como publicar posts agendados, enviar e-mails, rodar backups e checar atualizações. Diferente de um cron real do sistema operacional, ele só dispara quando alguém acessa o site: cada visita verifica se há tarefas pendentes. Em sites com pouco tráfego, ou quando a chamada loopback ao wp-cron.php está bloqueada, as tarefas atrasam ou nunca rodam, e aparece o aviso de agendamento perdido.

Como identificar

  • Um post agendado fica com o status “Agendamento perdido” (Missed schedule) e não é publicado na hora marcada.
  • Em Ferramentas, Saúde do site, aparece o aviso “O WP-Cron não funcionou desde a última verificação”.
  • Backups, e-mails transacionais e relatórios de plugins param de ser enviados sem nenhuma mensagem de erro.
  • O comando wp cron event list via WP-CLI mostra eventos com a coluna de próxima execução muito atrasada.
Antes de começar: Antes de editar o wp-config.php, faça backup do arquivo. Definir DISABLE_WP_CRON como true sem criar o cron real do servidor deixa todas as tarefas agendadas paradas, inclusive backups e atualizações de segurança.

Como prevenir

  • Configure um cron real do servidor a cada 5 minutos desde a instalação, em vez de confiar no disparo por visita
  • Monitore os eventos agendados com WP Crontrol ou WP-CLI e cheque a tela de Saúde do site após cada migração
  • Garanta que firewall e Cloudflare nunca bloqueiem a requisição loopback ao wp-cron.php do próprio servidor

Causa

  • O site tem pouco ou nenhum tráfego, então não há visitas para disparar o WP-Cron, que só roda quando uma página é carregada.
  • A constante DISABLE_WP_CRON está definida como true no wp-config.php, mas nenhum cron real do servidor foi configurado para substituí-la.
  • A requisição loopback (o site chamando o próprio wp-cron.php) está bloqueada por firewall, Cloudflare, autenticação HTTP básica ou DNS interno incorreto.
  • Um plugin de cache de página inteira serve a home cacheada e o WordPress nunca executa o disparo do cron naquela visita.
  • A constante ALTERNATE_WP_CRON foi ativada de forma incorreta e gera um redirecionamento que impede o agendador de concluir.

Como resolver

  1. Confirme se o cron está travado: instale o plugin WP Crontrol ou rode o comando de listagem do WP-CLI. Se houver eventos com horário no passado acumulados, o agendador não está disparando.
    wp cron event list
    wp cron event run --due-now
  2. Desative o WP-Cron interno: no wp-config.php, acima da linha que pede para parar de editar, adicione a constante que desliga o disparo por visita. Sozinha ela para o agendador; o passo seguinte é obrigatório.
    define( 'DISABLE_WP_CRON', true );
  3. Agende um cron real no servidor: no painel da hospedagem (cPanel, Cron Jobs) ou via crontab, crie uma tarefa que chame o wp-cron.php a cada 5 minutos. Use a versão por linha de comando para não depender de HTTP.
    */5 * * * * cd /home/usuário/public_html && php wp-cron.php >/dev/null 2>&1
  4. Teste a chamada loopback: abra o endereço seudominio.com/wp-cron.php?doing_wp_cron no navegador. Se a página carregar em branco e retornar 200, o loopback está livre; se travar ou der 403, há um bloqueio de firewall ou autenticação.
  5. Libere o loopback no firewall: se a chamada falhar, libere o IP do próprio servidor no firewall ou na regra de Cloudflare e remova qualquer autenticação HTTP básica que cubra o wp-cron.php.
PHP
// functions.php do tema filho — alerta se um evento do WP-Cron atrasa mais de 1 hora
add_action( 'admin_notices', function () {
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    $proximo = wp_next_scheduled( 'wp_version_check' );
    if ( $proximo && ( time() - $proximo ) > HOUR_IN_SECONDS ) {
        $atraso = human_time_diff( $proximo, time() );
        echo '<div class="notice notice-warning"><p>WP-Cron atrasado em ' . esc_html( $atraso ) . '. Verifique o cron do servidor.</p></div>';
    }
} );

Perguntas frequentes

Por que o WP-Cron não dispara sozinho?
Porque ele não é um cron de verdade do sistema. O WordPress só verifica tarefas pendentes quando alguém carrega uma página. Em sites com pouco tráfego, sem visitas frequentes, as tarefas atrasam ou nunca rodam até a próxima visita acontecer.
Qual a diferença entre WP-Cron e um cron real do servidor?
O WP-Cron depende de tráfego para disparar; o cron real do servidor roda em intervalos fixos definidos pelo sistema operacional, independente de visitas. O ideal é desativar o WP-Cron e chamar o wp-cron.php por um cron real a cada poucos minutos.
Como saber se meu WP-Cron está travado?
Use o plugin WP Crontrol ou o comando wp cron event list do WP-CLI. Se vários eventos aparecerem com horário no passado acumulado, o agendador parou de disparar. A tela de Saúde do site também avisa quando o WP-Cron falha.
Posts agendados pararam de publicar. É problema de cron?
Quase sempre sim. A publicação agendada depende do WP-Cron. Quando ele não dispara, o post fica com status de agendamento perdido. Configurar um cron real do servidor faz os posts voltarem a publicar no horário marcado.
Desativar o WP-Cron deixa o site mais rápido?
Pode aliviar um pouco, porque cada visita deixa de checar tarefas pendentes. O ganho real, porém, é de confiabilidade: as tarefas passam a rodar em horário fixo. Lembre que desativar sem configurar o cron real para todas as tarefas é arriscado.
O que é a requisição loopback do WP-Cron?
É o WordPress chamando o próprio endereço wp-cron.php por HTTP para executar as tarefas. Se firewall, Cloudflare ou autenticação básica bloquearem essa chamada, o cron falha mesmo com tráfego. Teste abrindo a URL do wp-cron.php direto no navegador.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes