Como corrigir a limpeza automática agendada que não roda no WP-Optimize
O que é a limpeza automática agendada que não roda no WP-Optimize?
A limpeza automática agendada que não roda no WP-Optimize é a falha em que a opção marcada na aba Settings, em Scheduled clean-up settings, não executa as operações de banco na frequência escolhida: o site segue acumulando revisões de post, rascunhos automáticos, comentários de spam e transients expirados, e a tela Database mostra o mesmo overhead semana após semana. O WP-Optimize não tem relógio próprio. Ao salvar o agendamento, ele apenas registra o evento wpo_cron_event2 no WP-Cron, o agendador interno do WordPress, com a frequência escolhida em wpo_weekly_cron_event ou equivalente. Quem decide a hora de executar é o WP-Cron, que só é verificado quando uma página do site é carregada e que usa o fuso definido em Configurações, Geral. Por isso, em site de baixo tráfego ou com o WP-Cron desligado, a limpeza marcada para a madrugada simplesmente não acontece, mesmo com a caixa Enable scheduled clean-up and optimization ativa.
Como identificar
- A opção “Enable scheduled clean-up and optimization” está marcada na aba Settings, mas a aba Database continua mostrando o mesmo “overhead” e o mesmo número de revisões semana após semana.
- O painel mostra “Last automatic optimization” (Última otimização automática) com uma data antiga ou em branco, mesmo com a frequência configurada como semanal.
- O comando wp cron event list não lista o evento wpo_cron_event2, ou lista com a coluna de próxima execução em horário já no passado.
- A limpeza marcada para a madrugada só acontece no meio da manhã, no horário em que chega o primeiro visitante do dia, em vez do horário agendado.
- O log em wp-content/uploads/wp-optimize/wpo-cron.log não registra novas execuções, sinal de que o evento agendado nunca é disparado.
Como prevenir
- Use um cron real do servidor a cada 15 minutos em vez de confiar no disparo por visita, para a limpeza agendada rodar mesmo nos dias de baixo tráfego
- Sempre que marcar a opção em Scheduled clean-up settings, clique em Save settings e confira em wp cron event list se o evento wpo_cron_event2 foi mesmo criado
- Defina o fuso horário em Configurações, Geral, para a sua cidade logo na instalação, antes de configurar a frequência da limpeza no WP-Optimize
- Mantenha a opção “Keep a log of all optimizations” ativa para o registro em wpo-cron.log mostrar cada ciclo e você perceber rápido quando a limpeza para de rodar
Causa
- O WP-Cron é verificado só quando alguém carrega uma página, então em site de baixo tráfego o evento wpo_cron_event2 fica parado esperando a próxima visita e a limpeza marcada para a madrugada nunca dispara naquele horário.
- A constante DISABLE_WP_CRON está como true no wp-config.php, herança de um ajuste de performance, mas nenhum cron real do servidor foi criado, então o WordPress nunca executa o evento agendado do WP-Optimize.
- Existem dois eventos wpo_cron_event2 registrados no WP-Cron, herança de uma reativação do plugin, e os dois competem entre si com horários próprios, deixando o agendamento inconsistente.
- O fuso horário em Configurações, Geral, está em UTC em vez da cidade local, então o WP-Optimize agenda a próxima limpeza somando o intervalo a um relógio diferente e ela cai em horário deslocado.
- Um plugin de cache de página inteira serve a home a partir do cache e o WordPress não roda o disparo do WP-Cron naquela visita, empurrando a otimização agendada para uma carga de página que escape do cache.
- A opção "Enable scheduled clean-up and optimization" foi marcada mas o botão Save settings não foi clicado, então a frequência não chegou a gravar o evento wpo_cron_event2 no agendador.
Como resolver
- Confirme que o evento de limpeza está mesmo agendado: antes de qualquer ajuste, liste os eventos do WP-Cron e procure pelo evento do WP-Optimize. Se ele não aparecer, o agendamento não foi gravado e o problema está no salvamento das configurações, não no cron.
wp cron event list | grep wpo_cron_event2 - Regrave o agendamento nas configurações do WP-Optimize: abra WP-Optimize, Settings, em Scheduled clean-up settings, confirme a caixa marcada, escolha a frequência e salve. Esse salvamento força o plugin a reescrever um evento limpo no agendador interno.
wp-admin -> WP-Optimize -> Settings -> Enable scheduled clean-up and optimization wp option get wpo_weekly_cron_event - Verifique o fuso horário do WordPress: ajuste o fuso em Configurações, Geral, para a sua cidade, não para um valor UTC fixo, para o WP-Optimize calcular o próximo horário a partir do relógio local. Confirme a hora atual do servidor pela linha de comando.
wp option get timezone_string wp eval 'echo current_time("mysql");' - Desative o WP-Cron disparado por visita: edite o wp-config.php, antes da linha que pede para parar de editar, e desligue o disparo por carga de página, que é o que faz a limpeza só rodar quando chega tráfego. Sozinha, esta linha para o agendador, então o passo seguinte é obrigatório.
define( 'DISABLE_WP_CRON', true ); - Crie um cron real do servidor: no painel da hospedagem, em Cron Jobs, ou via crontab, agende uma chamada ao wp-cron.php a cada 15 minutos. Assim o evento da limpeza é checado em intervalo fixo, independente de visitas, e a otimização agendada passa a rodar no horário.
*/15 * * * * cd /home/usuário/public_html && php wp-cron.php >/dev/null 2>&1 - Force uma execução e confira o resultado: rode o evento manualmente uma vez para validar que a limpeza executa de fato, depois liste de novo o agendamento para confirmar que o próximo horário caiu dentro da frequência configurada.
wp cron event run wpo_cron_event2 wp cron event list | grep wpo_cron_event2
// wp-cli: diagnostica o agendamento real da limpeza do WP-Optimize
// Rode com: wp eval-file diagnostico-limpeza.php
$proximo = wp_next_scheduled( 'wpo_cron_event2' );
if ( ! $proximo ) {
WP_CLI::warning( 'Nenhum evento wpo_cron_event2 agendado. Marque a limpeza em Settings e salve.' );
} else {
$hora = wp_date( 'd/m/Y H:i', $proximo ); // usa o fuso do WordPress
WP_CLI::log( "Proxima limpeza agendada: {$hora}" );
if ( ( $proximo - time() ) < 0 ) {
WP_CLI::warning( 'Horario no passado: o WP-Cron nao esta disparando a limpeza.' );
}
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
WP_CLI::log( 'DISABLE_WP_CRON ativo: confirme um cron real do servidor chamando o wp-cron.php.' );
}
}














