WordPress Extremo
- Como Criar um Plugin WordPress com Composer e PSR-4 – WordPress Extremo Dia 1
- Como Usar Serviços em Plugins para Código Limpo e Desacoplado – WordPress Extremo Dia 2
- Como Usar Repositórios em Plugins para Separar Lógica de Dados – WordPress Extremo Dia 3
- Injeção de Dependência Manual em Plugins WordPress – WordPress Extremo Dia 4
- Hooks Avançados no WordPress: apply_filters, do_action e boas práticas
- Criando Comandos WP-CLI Personalizados para Plugins WordPress
- Criando Blocos Personalizados com Gutenberg e React
- Estilizando Blocos Gutenberg com CSS e Classes Dinâmicas
- Cor, Alinhamento e Estilo Dinâmico com Gutenberg + React
- Ícones, Imagens e Classes Personalizadas no Gutenberg
- Componentes Reutilizáveis e Atributos Compostos em Blocos Gutenberg
- Conectando Blocos com a REST API do WordPress
- Bloco Dinâmico com Renderização no Servidor
- Filtrando Posts por Categoria no Editor do Bloco
- Bloco de Posts com Filtro por Múltiplas Categorias
- Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)
- Tratamento de Erros e Uso Inteligente de Exceptions em Plugins WordPress
- Segurança Profunda em Plugins WordPress
No Dia 08/14 da nossa série sobre Arquitetura e Engenharia de Plugins WordPress, vamos dar continuidade direta ao que construímos no dia anterior. Já temos um sistema de logs profissional — agora é hora de falar sobre algo que se integra perfeitamente com ele:
Criar plugins profissionais significa não deixar o WordPress explodir no usuário quando algo dá errado.
Erros acontecem — APIs falham, banco de dados retorna vazio, permissões negadas. O que diferencia um plugin amador de um plugin profissional é como ele trata esses erros.
Neste dia, vamos:
- Entender quando e como lançar
Exceptions
; - Criar nossa
AppException
; - Integrar com o nosso
LogService
para registro e visibilidade; - Preparar o terreno para tratamentos elegantes no frontend ou REST API.
😨 O que acontece sem tratamento?
Sem tratamento, erros como esse quebram o site inteiro:
$response = file_get_contents('https://api.inexistente.com/dados');
// PHP Warning: file_get_contents(): failed to open stream...
Ou ainda:
$user = get_user_by('email', '[email protected]');
$user->ID; // Fatal error: Trying to access property on null
🔴 Resultado: Tela branca da morte. Cliente revoltado.
✅ Como vamos tratar isso
1. Criar uma Exception personalizada
// src/Exceptions/AppException.php
namespace WpArquiteturaExtrema\Exceptions;
use Exception;
class AppException extends Exception
{
protected $context;
public function __construct($message, $code = 0, $context = [])
{
parent::__construct($message, $code);
$this->context = $context;
}
public function getContext()
{
return $this->context;
}
}
2. Usar no fluxo de negócio
use WpArquiteturaExtrema\Exceptions\AppException;
use WpArquiteturaExtrema\Services\LogService;
$log = new LogService();
try {
$response = file_get_contents('https://api.inexistente.com/dados');
if (!$response) {
throw new AppException('Resposta vazia da API', 1001, ['endpoint' => 'api.inexistente.com/dados']);
}
// processamento...
} catch (AppException $e) {
$log->error("Erro: {$e->getMessage()}");
$log->info("Contexto: " . print_r($e->getContext(), true));
}
🎯 Quando usar try/catch?
- Ao consumir APIs externas
- Ao acessar banco de dados com resultados incertos
- Ao trabalhar com arquivos locais
- Em execuções que nunca devem quebrar o plugin
🧠 Dica PRO
Evite try/catch
em excesso.
Use onde há riscos reais de falha.
Registre logs com mensagens claras e contexto útil.
📌 Recapitulando
✔️ Criamos uma AppException
personalizada
✔️ Aprendemos a capturar exceções com contexto útil
✔️ Integramos com nosso sistema de logs
✔️ Estamos prontos para capturar falhas com segurança
🚀 Agora nosso plugin está mais confiável, rastreável e robusto.