No momento, você está visualizando O que são Hooks?

O que são Hooks?

  • Last modified: 15 de fevereiro de 2019
  • Reading time: 4 mins
Este post faz parte de um conjunto de artigos organizados em um Curso de WordPress. Acesse o link para outros conteúdos.

Este post é uma introdução para o artigo Hooks no Wordpress: Actions e Filters 😉

Hooking, do inglês enganchar, é um conceito que permite modificar o comportamento de um programa. É a chance que um código te dá para alterar o comportamento original de alguma coisa sem alterar seu código.

O trem é o fluxo de processamento normal. Em certos lugares ele coleta o que outros módulos tem para oferecer.
O trem é o fluxo de processamento normal. Em certos lugares ele coleta o que outros módulos tem para oferecer.

Uma aplicação prática

Imagine que você está utilizando um CMS que não é seu, que gostaria que um superadministrador fosse avisado por e-mail toda vez que um post novo fosse publicado e que este comportamento não é padrão da ferramenta. Surgiriam alguns caminhos a seguir:

  • Alterar o código-fonte do CMS. Péssima ideia, afinal na próxima atualização da ferramenta você enfrentará o dilema de perder sua alteração ou não poder manter tudo atualizado;
  • Criar seu próprio CMS. Outra ideia ruim, afinal você não tem tempo (nem braços) o suficiente para bolar coisas novas ou sequer manter o que construir (além de estar tentando reinventar a roda);
  • Investigar a possibilidade de utilizar um hook, isto é, verificar se o CMS procura em módulos/plugins externos por funções de determinado nome a serem executadas no momento desejado, neste caso o de publicação de novos posts.

O aspecto prático de utilização dos hooks varia muito de ferramenta para ferramenta. A construção de módulos do drupal, por exemplo, é toda baseada em hooks. Quando vai salvar um post, exibir um bloco, exibir ajuda, deletar um comentário, em todas estas ocasiões o que o drupal faz é verificar se os módulos disponibilizam funções com determinado nome para acrescentar ou retirar alguma coisa do que será feito.

Principal vantagem

Como eu disse aí em cima: a principal vantagem dos hooks é não alterar o código original. Em todos os manuais de boas práticas de todas as ferramentas open source que tem atualizações periódicas o mantra que se repete é não altere o core. Além de impossibilitar atualizações, quem vier depois para fazer manutenção não saberá da mudança e quem fica mal falado com isso é você e não a ferramenta.

Disponibilizando hooks

Ok, é um cenário incomum. Utilizamos hooks muito mais do que disponibilizamos, mas se você estiver construindo algo grande, que será utilizado por equipes diferentes com necessidades (mesmo que levemente) diferentes pense em dar a deixa para outros fazerem alguma coisa. Antes de salvar um dado no banco, não custa nada deixar que outros o alterem para suas necessidades. Vai exibir alguma coisa na tela? Idem. Na maioria dos casos o investimento de tempo é mínimo e o ganho para quem está do outro lado é enorme.

Comente aí o que achou do artigo e confira a aplicação dos hooks no WordPress.

Este post tem 7 comentários

  1. Luíza Russo

    Muito bom, mas então, basicamente, quando queremos modificar o funcionamento de um plugin, dependemos dele ter uma documentação? Ou conseguimos identificar os possíveis hooks de outra forma?

    1. Felipe Elia

      Oi Luíza,

      Se ele tiver documentação é perfeito, mas em vários casos a gente não pode contar com isso. Mesmo os plugins que tem documentação muitas vezes não falam de todos os hooks que fornecem.
      Para casos específicos é sempre bom procurar no código por chamadas às funções apply_filters, apply_filters_ref_array, do_action e do_action_ref_array. São elas que disponibilizam hooks para que você possa chamar as suas funções.

      Exemplo: o Contact Form 7 (plugin para geração de formulários) valida os dados fornecidos pelo usuário e chama $result = apply_filters( ‘wpcf7_validate’, $result, $tags );. Isto quer dizer que você pode criar uma função, pendurá-la no hook wpcf7_validate e alterar o resultado da validação. Infelizmente, na documentação do plugin o autor acaba não comentando desse filtro: https://contactform7.com/2015/03/28/custom-validation/, pra descobrir só vendo o código mesmo.

      1. Luíza Russo

        Obrigada, Fellipe. Clareou bastante 😀

  2. Lome Card

    Muito obrigado pelo artigo, ajudou bastante.

  3. Danillo Guimarães de Oliveira

    Muito bom seu artigo… eu quebrei a cabeça tentando entender e supondo uma série de coisas até me deparar com seu artigo.

    1. Felipe Elia

      Obrigado Danillo, que bom que gostou! 🙂

Os comentários estão encerrados.