Como corrigir erro de timezone no PHP do WordPress
O que é o erro de timezone no PHP?
O PHP usa a diretiva date.timezone para saber em que fuso calcular datas e horas. Quando ela fica em branco, versões antigas do PHP emitem um aviso e assumem UTC, e qualquer código que dependa de hora local mostra o horário errado. No WordPress, porém, o fuso do site não vem dessa diretiva: ele é definido em Configurações, Geral, e o WordPress trata datas internamente em UTC. O erro de timezone, então, tem duas frentes: o aviso do servidor pela diretiva ausente e a confusão de horário causada por ajustar o fuso no lugar errado.
Como identificar
- Aviso “date.timezone is not set” ou “It is not safe to rely on the system’s timezone settings” no log ou na tela.
- Horários de publicação, comentários ou agendamentos aparecem adiantados ou atrasados várias horas.
- Tarefas agendadas (wp-cron) disparam em horário diferente do esperado.
- Plugins que mostram data e hora exibem o fuso UTC em vez do horário local configurado.
Como prevenir
- Defina o fuso do site sempre em Configurações, Geral do WordPress, escolhendo a cidade
- Declare date.timezone no php.ini com um identificador válido para evitar o aviso do servidor
- Em código, use as funções de data do WordPress (que respeitam o fuso) em vez das funções nativas do PHP
Causa
- Diretiva date.timezone vazia no php.ini do servidor, fazendo o PHP cair no padrão UTC.
- Fuso do site não configurado em Configurações, Geral do WordPress, deixando datas em UTC.
- Uso de date_default_timezone_set no functions.php, que conflita com o controle de fuso do próprio WordPress.
- Servidor em UTC enquanto o público e o administrador estão em outro fuso, sem ajuste no WordPress.
- Plugin que chama funções de data nativas do PHP em vez das funções de data do WordPress, ignorando o fuso do site.
Como resolver
- Ajuste o fuso pelo painel do WordPress: vá em Configurações, Geral e escolha sua cidade em Fuso horário (ex.: São Paulo). É aqui que o WordPress define a hora local de posts e agendamentos, não no php.ini.
- Defina date.timezone no php.ini: para acabar com o aviso do servidor, via FTP edite (ou crie) o php.ini na raiz e declare o fuso, usando um identificador válido da lista do PHP:
date.timezone = "America/São_Paulo" - Se não tiver php.ini, use o .htaccess: em servidores Apache, adicione a diretiva ao .htaccess da raiz para definir o fuso do PHP:
php_value date.timezone "America/São_Paulo" - Remova date_default_timezone_set do tema: se alguém adicionou date_default_timezone_set no functions.php, apague essa linha. Ela briga com o controle de fuso do WordPress e bagunça os horários do site.
- Confira o horário em Saúde do Site: publique um post de teste ou abra Ferramentas, Saúde do Site e confirme que data e hora batem com o fuso escolhido. Se ainda divergir, limpe o cache e revise os passos anteriores.
; php.ini — define o fuso padrao do PHP e elimina o aviso date.timezone
; Use um identificador valido da lista oficial do PHP (nao um offset como -3)
date.timezone = "America/Sao_Paulo"














