Como corrigir cURL error 28: timeout no WordPress
O que é o cURL error 28 (timeout) no WordPress?
O cURL error 28 é o código que a biblioteca cURL retorna quando uma requisição HTTP não recebe resposta dentro do tempo permitido (“Operation timed out” ou “Connection timed out”). No WordPress, ele surge quando o site usa wp_remote_get/wp_remote_post para falar com uma API externa, com o servidor de updates do WordPress.org ou consigo mesmo (loopback), e essa chamada demora demais. O número 28 é específico de timeout, diferente de outros erros cURL como o 7 (não conseguiu conectar) ou o 60 (certificado SSL inválido).
Como identificar
- A Saúde do site mostra “A requisição de teste de loopback do REST API falhou” ou “cURL error 28: Operation timed out after 10000 milliseconds”.
- Tarefas agendadas (WP-Cron) não rodam e o painel acusa “cURL error 28: Connection timed out”.
- Plugins que consultam APIs externas (frete, pagamento, IA) falham com a mensagem cURL error 28.
- A verificação de atualizações trava e o WordPress avisa que não conseguiu se conectar ao servidor de updates.
Como prevenir
- Use um cron real do servidor (crontab chamando o wp-cron.php) em vez do WP-Cron por loopback em sites com tráfego
- Monitore as APIs externas que seus plugins consomem para detectar lentidão antes que vire timeout
- Mantenha o DNS do servidor saudável e peça ao host para confirmar que conexões de saída na 443 estão liberadas
Causa
- Requisição de loopback bloqueada (o servidor não consegue chamar a própria URL por firewall, DNS interno ou autenticação básica).
- API externa lenta ou fora do ar que não responde dentro do timeout padrão do WordPress (5s a 10s).
- Timeout do cURL/PHP curto demais para a operação (default_socket_timeout baixo).
- Firewall do servidor ou regra de segurança da hospedagem bloqueando conexões de saída (porta 443/80).
- DNS lento ou mal configurado no servidor, atrasando a resolução do domínio de destino além do limite.
Como resolver
- Identifique qual chamada está estourando o tempo: vá em Ferramentas > Saúde do site > Informações e veja se o erro cita loopback (o site chamando a si mesmo) ou um domínio externo. Isso separa problema de servidor de API de terceiro fora do ar.
- Teste o loopback manualmente: acesse pela URL do seu site /wp-cron.php no navegador. Se demorar muito ou der erro, o servidor não está conseguindo se chamar e o cron real está parado por isso.
- Aumente o timeout das requisições do WordPress: via FTP, adicione ao functions.php do tema (ou a um plugin de snippets) um filtro que eleva o tempo limite das chamadas HTTP de 5 para 30 segundos:
add_filter( 'http_request_timeout', function() { return 30; } ); - Desative WP-Cron e use um cron real do servidor: se o erro for no cron por loopback, desligue o cron interno no wp-config.php e agende o wp-cron.php no painel da hospedagem (a cada 5 minutos):
define( 'DISABLE_WP_CRON', true ); - Peça ao host para liberar conexões de saída: se o destino é externo e responde rápido fora do servidor, o firewall da hospedagem pode estar bloqueando a saída. Abra um chamado pedindo a liberação das portas 80 e 443 para conexões de saída.
// functions.php do tema (ou plugin de snippets)
// Eleva o timeout das requisicoes HTTP do WordPress de 5s para 30s
add_filter( 'http_request_timeout', function( $timeout ) {
return 30; // segundos
} );
// Aplica o mesmo teto tambem ao loopback do cron/REST
add_filter( 'http_request_args', function( $args ) {
$args['timeout'] = 30;
return $args;
} );














