Quando usar Hook action e quando usar filter, e quais as diferenças entre eles.
call_action() | append_action()
call_filter() | append_filter()
Action Hook::call_action / Hook::append_action
Actions: servem para executar um código adicional em um ponto específico da aplicação.
Não retornam nem modificam valores.
É como um "sinal" de que algo aconteceu, e outras funções podem reagir.
Quando usar:
- Executar lógica paralela (log, debug, e-mail, tracking)
- Injetar CSS ou JS no painel
- Criar integração com addons
- Enfileirar assets no painel ou template
- Rodar extensões sem alterar nada diretamente
Exemplo:
// No sistema ou addon/
Hook::call_action( 'after_login', $user_id );
// Em features.php do template ou um addon/
Hook::append_action( 'after_login', function($user_id) {
log_access($user_id);
Email::send_welcome($user_id);
});
Se você não precisa alterar nenhum valor, use action_*.
Filter Hook::call_filter / Hook::append_filter
Filters servem para adicionar, modificar, substituir, ou até remover valores antes que eles sejam usados ou exibidos.
Você envia um valor e espera um retorno com ele modificado.
Quando usar:
- Alterar título de páginas
- Mudar caminho de inclusão de arquivos
- Personalizar valores padrões
- Trocar rotas, nomes de arquivos, HTML, etc
Exemplo:
// No sistema ou addon:
$page_title = . 'Título padrão — ' . site_title();
$title = Hook::call_filter( 'page_title', $page_title );
// Em um template ou addon:
Hook::append_filter( 'page_title', function($title) {
return $title . ' | Título adicional Personalizado';
});
Se você precisa alterar um valor antes que ele seja usado, use filter.
Resumo rápido
| Action: | Executa lógica (sem retorno) | |
|---|---|---|
| Filter: | Modifica valor (com retorno) | |
call_action |
→ | append_action |
call_filter |
→ | append_filter |
Notas:
- A ordem de execução dos filters segue a ordem que foram registrados.
- Todo filter deve retornar o valor.
- Action não retorna nada, é só execução paralela.