Erro: Headers already sent — Cabeçalho já enviado

Time Full Services Time Full Services
Tipo Erros fatais
Nome do erro Erro: Headers already sent — Cabeçalho já enviado
Severidade Crítico
Desde WordPress 1.0
Descrição Warning: Cannot modify header information - headers already sent. Impede redirecionamentos e definição de cookies após qualquer saída de texto.

Causa

Algum caractere foi enviado ao browser antes de wp_redirect() ou setcookie() ser chamado. Causas comuns: espaço antes do <?php, BOM no arquivo, echo/print prematuros, ou erros de PHP que geram output.

Como resolver

Garanta que não haja nenhuma saída antes dos headers. Salve arquivos PHP sem BOM (UTF-8 without BOM). Use ob_start() como solução temporária. Ative WP_DEBUG para localizar a origem.

PHP
<?php
// ❌ CAUSA COMUM: espaço ou quebra de linha antes do <?php
//
// Arquivo com espaço antes do <?php:
//   " <?php" ← esse espaço já envia output!

// ✅ SOLUÇÃO 1: Output buffering (temporário)
ob_start();
// ... código que pode gerar output acidentalmente
wp_redirect(home_url('/destino'));
ob_end_clean();
exit;

// ✅ SOLUÇÃO 2: Usar o hook correto para redirecionamentos
add_action('template_redirect', function (): void {
    if (is_page('antiga') && !is_admin()) {
        wp_safe_redirect(home_url('/nova'), 301);
        exit;
    }
});

// ✅ SOLUÇÃO 3: Verificar antes de redirecionar
if (!headers_sent()) {
    wp_redirect(home_url());
    exit;
} else {
    echo '<script>window.location = ' . json_encode(home_url()) . '</script>';
    exit;
}

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 →