Rodando localmente o WordPress 3.1 de um novo projeto no meu MacBook, estava modificando o layout do tema que estou utilizando e adicionando outras funcionalidades. De repente, começou a aparecer, principalmente na interface de administração, a seguinte mensagem de erro:
Warning: Cannot modify header information - headers already sent by (output started at /Users/Prodis/TimeDev/pontoa/public_html/wp-content/themes/pontoa/includes/widgets/my-post-cycle-widget.php:93) in /Users/Prodis/TimeDev/pontoa/public_html/wp-includes/pluggable.php on line 897
É um alerta do PHP, mas digo erro, pois dependendo da página a mesma não carregava e em muitas outras, que utilizam AJAX, a mensagem aparecia em algum lugar da página e não terminava de renderizar.
Entre os arquivos que alterei, fazia parte o arquivo my-post-cycle-widget.php, que contém o código de um dos widgets que vieram com o tema. Então abri o arquivo para ver o que tinha na linha 93 e para surpresa minha o arquivo somente tinha 92 linhas.
Widgets do WordPress são basicamente uma classe que herda da classe WP_Widget e implementa algumas funções como widget, update e form, para adicionar seu comportamento. Sendo assim, todo o arquivo de um widget é envolvido pelas tags <?php ?>.
Foi aí que eu notei que na última linha do arquivo my-post-cycle-widget.php havia uma linha vazia logo após o fechamento da tag do PHP. Removi essa linha vazia (a linha 92) e tudo voltou ao normal.
O erro aconteceu porque a função wp_redirect, que se encontra no arquivo pluggable.php, altera o cabeçalho HTTP exatamente assim:
header("Location: $location", true, $status);
Se algum conteúdo HTML for enviado antes de tentar modificar o cabeçalho HTTP, o erro vai acontecer. E sim, espaços e linhas vazias são considerados conteúdo HTML.
Geral Blog, Dicas, PHP, WordPress
Comentários