Erro: Headers already sent — Cabeçalho já enviado
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;
}