DesenvolvedorWordPress WhatsApp

Hooks do WordPress: actions e filters na prática

Hooks são a base da extensibilidade do WordPress: permitem adicionar e modificar comportamento sem tocar no núcleo. Entenda de uma vez a diferença entre actions e filters, com exemplos de código que você pode usar hoje.

Precisa de desenvolvimento sob medida?

Atualizado em 19/06/2026

Quase tudo que você customiza no WordPress sem editar o núcleo passa por hooks. São pontos de extensão que o WordPress (e plugins como o WooCommerce) expõe ao longo da execução, onde o seu código pode "se pendurar". Existem dois tipos — actions e filters — e entender a diferença entre eles resolve a maior parte das dúvidas de quem está começando a programar para WordPress.

Action × Filter: a diferença essencial

A distinção é simples e vale memorizar:

ActionFilter
Para que serveExecutar um efeitoModificar e devolver um valor
Registra comadd_action()add_filter()
Dispara comdo_action()apply_filters()
Precisa dar return?NãoSim, sempre

Actions: executando código no momento certo

Você "pendura" uma função em um hook com add_action( $hook, $callback ). O exemplo clássico é enfileirar CSS/JS no hook wp_enqueue_scripts:

<?php
add_action( 'wp_enqueue_scripts', 'meu_tema_assets' );

function meu_tema_assets() {
    wp_enqueue_style( 'meu-estilo', get_stylesheet_uri(), array(), '1.0.0' );
    wp_enqueue_script( 'meu-script', get_template_directory_uri() . '/js/app.js', array( 'jquery' ), '1.0.0', true );
}

Aqui, meu_tema_assets() roda quando o WordPress chega ao momento de carregar scripts e estilos — nem antes, nem depois. Usar o hook certo é o que garante que as funções (wp_enqueue_style, etc.) já existam e funcionem.

Filters: modificando valores

Um filter recebe um valor e precisa devolvê-lo. Este exemplo encurta o resumo (excerpt) para 20 palavras:

<?php
add_filter( 'excerpt_length', 'meu_tamanho_resumo' );

function meu_tamanho_resumo( $length ) {
    return 20; // sempre retorne um valor
}

O erro mais comum em filters é não retornar. Veja o contraste:

<?php
// ERRADO: não retorna nada -> o conteúdo some
add_filter( 'the_content', function ( $content ) {
    $content .= '<p>Texto extra.</p>';
    // faltou o return!
} );

// CERTO
add_filter( 'the_content', function ( $content ) {
    return $content . '<p>Texto extra.</p>';
} );

Prioridade e número de argumentos

As assinaturas completas são add_action( $hook, $callback, $priority = 10, $accepted_args = 1 ) e add_filter( ... ) com os mesmos parâmetros. Dois detalhes que causam muito bug:

<?php
// Queremos os 2 argumentos que o hook 'save_post' passa: $post_id e $post
add_action( 'save_post', 'minha_acao_ao_salvar', 10, 2 );

function minha_acao_ao_salvar( $post_id, $post ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return; // ignora revisões
    }
    // ... seu código aqui, usando $post_id e $post
}

Criando os seus próprios hooks

Você não só consome hooks — pode expô-los no seu plugin ou tema, deixando que outros estendam o seu código. Use do_action() para actions e apply_filters() para filters:

<?php
// Um action: avisa que algo aconteceu (sem esperar retorno)
do_action( 'meu_plugin_apos_pedido', $pedido_id );

// Um filter: deixa terceiros ajustarem um valor antes de usá-lo
$preco_final = apply_filters( 'meu_plugin_preco_final', $preco, $produto_id );

É exatamente assim que o WooCommerce permite, por exemplo, alterar o texto do botão "comprar" ou injetar campos no checkout — tema do artigo sobre hooks do WooCommerce.

Removendo hooks

Para desligar algo adicionado pelo núcleo, por um tema ou plugin, use remove_action() / remove_filter() com o mesmo callback e a mesma prioridade do registro original:

<?php
// Remove a meta tag <meta name="generator"> com a versão do WordPress
remove_action( 'wp_head', 'wp_generator' );

Se a prioridade não bater com a usada no add_action original, a remoção silenciosamente não acontece. E callbacks registrados como funções anônimas (closures) são difíceis de remover, porque você não tem a referência ao objeto — por isso, em código que talvez precise ser desfeito, prefira funções nomeadas ou métodos de classe.

Erros comuns (e como evitar)

SintomaCausa provávelCorreção
Conteúdo some ao usar um filterFunção não deu returnSempre retorne o valor (mesmo sem alterá-lo)
Callback recebe só 1 argumento$accepted_args não declaradoInforme o nº de argumentos no add_*
Seu código não rodaHook registrado tarde demaisRegistre cedo (ex.: em plugins_loaded/init)
remove_action não faz efeitoPrioridade diferente do originalUse a mesma prioridade e rode depois do add

Hooks são também a forma correta de manter customizações fora do tema (que pode ser atualizado) — geralmente em um plugin próprio. E lembre-se da segurança: dados que entram em um callback devem ser sanitizados, e o que sai deve ser escapado.

Precisa estender o WordPress ou o WooCommerce com segurança?

Desenvolvo plugins e customizações via hooks, seguindo os padrões do WordPress para não quebrar nas atualizações. Me chame no WhatsApp.

WhatsApp: (43) 99932-9697

ou e-mail: [email protected]

Perguntas frequentes

Qual a diferença entre action e filter?

Um action dispara código em um determinado momento da execução e não espera retorno — você executa um efeito (enfileirar um script, enviar um e-mail, registrar algo). Um filter recebe um valor, permite modificá-lo e obrigatoriamente o retorna — serve para alterar dados antes de serem usados ou exibidos. Regra prática: se você precisa mudar e devolver um valor, é filter; se precisa apenas fazer algo, é action.

Por que meu filter "não funciona"?

A causa nº 1 é esquecer de retornar o valor. Uma função de filter que não dá return devolve null e quebra o conteúdo. A nº 2 é não declarar $accepted_args quando o hook passa mais de um argumento: por padrão o callback recebe só o primeiro. A nº 3 é registrar o hook tarde demais (depois do momento em que ele já disparou).

O que é a prioridade de um hook?

É o número (padrão 10) que define a ordem de execução quando várias funções usam o mesmo hook: menor roda antes, maior roda depois. Para sobrescrever algo adicionado por um plugin, registre seu callback com prioridade maior (ex.: 99). Prioridades iguais executam na ordem em que foram adicionadas.

Como remover um hook adicionado por um plugin ou tema?

Com remove_action() / remove_filter(), informando o mesmo nome de hook, o mesmo callback e a mesma prioridade usados no add_* original — se a prioridade não bater, a remoção não acontece. Além disso, a remoção precisa rodar depois de o hook ter sido adicionado. Callbacks registrados como funções anônimas (closures) são difíceis de remover, pois você não tem a referência.

Hooks deixam o site lento?

O sistema de hooks em si é leve. O que pesa é o que você coloca dentro deles: uma consulta pesada no hook init roda em toda requisição. Use o hook certo para o contexto (admin, front-end, cron) e evite trabalho caro em hooks que disparam sempre. Veja também cache de objeto.

Referências oficiais

  1. WordPress.org — Hooks (Plugin Handbook)
  2. WordPress.org — add_action() (Code Reference)
  3. WordPress.org — add_filter() (Code Reference)
  4. WordPress.org — Hooks (Common APIs)
Tem alguma dúvida? Ficarei feliz em ajudar. Clique Aqui