Wordpress

Tela branca no WordPress 6.9: como achar o erro com PHP 8.3

A página abre branca. Sem mensagem, sem stack trace, corpo vazio — às vezes com 500 no cabeçalho, às vezes com 200 limpinho. Isso é erro fatal do PHP com display_errors desligado, que é exatamente como produção deve estar. A resposta já foi escrita em algum log; o trabalho é achar qual.

A última linha do log do PHP-FPM

grep -n 'error_log|catch_workers_output' /etc/php/8.3/fpm/pool.d/www.conf
sudo tail -n 40 /var/log/php8.3-fpm.log
sudo tail -n 40 /var/log/nginx/error.log

Na instalação padrão do Debian e do Ubuntu aquele php_admin_value[error_log] vem comentado no pool. Sem ele, o erro sai pelo stderr do worker e acaba no error.log do nginx, com o prefixo PHP message: no meio da linha. Você procura algo assim: PHP Fatal error: Uncaught Error: Call to undefined function ... in /var/www/seusite/html/wp-content/plugins/nome-do-plugin/inc/loader.php on line 88. O caminho do arquivo já entrega o culpado, sem chute.

Desativar o plugin sem ter painel

cd /var/www/seusite/html/wp-content/plugins
sudo -u www-data mv nome-do-plugin nome-do-plugin.off

A cada carregamento o wp_get_active_and_valid_plugins() testa com file_exists() se o arquivo principal de cada plugin ativo continua no lugar. Sumindo o diretório, ele pula aquele item e o site volta no F5 seguinte. Renomear em vez de apagar preserva o código e as configurações para quando você quiser investigar com calma. Pelo WP-CLI dá no mesmo: sudo -u www-data wp plugin deactivate nome-do-plugin --skip-plugins roda mesmo com o fatal de pé, porque a flag impede o carregamento dos plugins.

Cuidado com a conta de versão: create_function() e each() sumiram no PHP 8.0, não no 8.3 — só que quem pulou do 7.4 direto para o 8.3 descobre tudo de uma vez. O fatal só estoura quando aquele trecho roda, por isso o site parece inteiro e quebra em uma página só. E se o log não citar plugin nenhum, renomeie a pasta do tema em wp-content/themes: o WordPress cai no tema padrão sozinho, desde que ele ainda esteja instalado.

Post Recentes

Modifier de produto no Magento 2: campo novo no form sem sobrescrever XML

Como registrar um modifier no pool do formulário de produto do Magento 2 e criar um campo próprio na aba,…

5 horas atrás

DateTimeImmutable modify: por que a data não muda no PHP 8.3

Trocou DateTime por DateTimeImmutable e a data parou de andar? O modify devolve uma cópia nova em vez de alterar…

1 dia atrás

Defer nos scripts do WordPress 6.9 sem plugin, com wp_enqueue_script

Use o parâmetro strategy do wp_enqueue_script para adiar o JavaScript do tema, sem plugin de otimização, e entenda por que…

2 dias atrás

Banner de cookie que bloqueia de verdade: script só carrega depois do aceite

O banner aparece, o visitante não clica em nada e o Analytics já gravou cookie. Veja como segurar o script…

3 dias atrás

Revisar git diff com IA antes do commit: script que lê só o staged

Var_dump esquecido e senha de teste passam batido no commit. Um script PHP que lê o git diff --staged e…

3 dias atrás

Cannot query field no GraphQL do Magento 2: o campo existe e some

O campo está no schema.graphqls e a API insiste em Cannot query field. Limpe o cache certo, recompile o generated…

4 dias atrás