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
E aí, dev! Aqui é o Asllan, e no Dia 3 da nossa jornada WordPress Extremo, vamos dar mais um passo rumo à arquitetura sólida: separar a lógica de acesso a dados usando a famosa camada de Repositórios.
Talvez você esteja se perguntando:
“Mas Asllan, WordPress já tem
$wpdb
,get_posts()
… pra quê repositório?”
Eu te explico 👇
🧠 O que é um Repositório?
Um Repositório é uma classe responsável por centralizar o acesso aos dados.
Em vez de espalhar chamadas ao banco ou queries por todo o código, você coloca tudo em um único lugar, organizado e com nomes claros.
🧽 Resultado:
- Código mais limpo
- Fácil de testar
- Fácil de trocar o tipo de armazenamento depois (ex: REST API, banco externo, etc.)
🎯 Exemplo no contexto WordPress:
Imagine que seu plugin precisa listar todos os usuários com role editor
.
📉 Forma “bagunçada”:
$users = get_users(['role' => 'editor']);
Você repete isso em vários lugares.
📦 Forma com repositório:
$repository = new UserRepository();
$editors = $repository->getEditors();
Agora a lógica está isolada, limpa e pronta pra crescer.
🧰 Mão na massa – Criando nosso primeiro Repository
Estrutura de pastas:
/src
/Hooks
- Init.php
/Services
- HelloService.php
/Repositories
- UserRepository.php
UserRepository.php
<?php
namespace WpArquiteturaExtrema\Repositories;
class UserRepository {
public function getEditors() {
return get_users([
'role' => 'editor'
]);
}
}
HelloService.php
(atualizado pra usar o repo)
<?php
namespace WpArquiteturaExtrema\Services;
use WpArquiteturaExtrema\Repositories\UserRepository;
class HelloService {
public function execute() {
$repo = new UserRepository();
$editors = $repo->getEditors();
foreach ($editors as $user) {
error_log("Editor encontrado: " . $user->display_name);
}
}
}
Init.php
continua igual:
namespace WpArquiteturaExtrema\Hooks;
use WpArquiteturaExtrema\Services\HelloService;
class Init {
public function register() {
add_action('init', [$this, 'init_plugin']);
}
public function init_plugin() {
$service = new HelloService();
$service->execute();
}
}
🧠 Conclusão do Dia 3
- Usamos a camada de Repositório pra isolar o acesso a dados
- Evitamos acoplamento entre service e query
- Preparamos o terreno pra evoluir pra APIs, filtros avançados, cache, etc.
🔜 Próximo passo: Dia 4
Amanhã vamos introduzir injeção de dependência manual para facilitar ainda mais a arquitetura, criando um container simples de serviços.