Pular para o conteúdo principal

Quando usar *_action e *_filter

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.