ti-enxame.com

Diferença entre Ganchos de Filtro e Ação?

Eu estive olhando a API do plugin um pouco mais a fundo recentemente e fiquei me perguntando quais eram as diferenças reais entre os ganchos de ação e filtro . Ambos são eventos que recebem dados como um parâmetro e eles parecem ser capazes de fazer as mesmas coisas.

Obviamente, vejo que as ações são chamadas quando as ações ocorrem e os filtros são chamados quando os dados são manipulados, mas parece ser apenas uma diferença de nomenclatura semântica.

Além da semântica e para que são usados, quais são as diferenças reais entre eles?

49
Sruly

Oi @Sruly :

Você praticamente respondeu sua própria pergunta, mas eu vou elaborar um pouco.

Ganchos de ação

Ganchos de ações devem ser usados ​​quando o núcleo do WordPress ou algum plug-in ou tema estiver lhe dando a oportunidade de inserir seu código em um determinado ponto e executar um ou mais dos seguintes procedimentos:

  1. Use echo para injetar algum HTML ou outro conteúdo no buffer de resposta,
  2. Modifica o estado da variável global para uma ou mais variáveis ​​e/ou
  3. Modifica os parâmetros passados ​​para a função hook (assumindo que o hook foi chamado por do_action_ref_array() ao invés de do_action() já que o último não suporta variáveis ​​passantes by-reference .)

Ganchos de Filtro

Ganchos de Filtro se comportam de maneira muito semelhante a Ganchos de ação mas seu uso pretendido é receber um valor e potencialmente retornar uma versão modificada do valor. Um gancho de filtro também pode ser usado como um Action Hook, ou seja, para modificar uma variável global ou gerar algum HTML, assumindo que é isso que você precisa fazer quando o hook é chamado. Uma coisa que é muito importante sobre Ganchos de Filtro com os quais você não precisa se preocupar com Ganchos de Ação é que a pessoa usando um Gancho de Filtro deve return (uma versão modificada) do primeiro parâmetro foi passado. Um erro comum do newbie é esquecer de retornar esse valor!

Usando Parâmetros Adicionais para Fornecer Contexto em Ganchos de Filtro

Como um aparte Eu senti que Filter Hooks foram prejudicados em versões anteriores do WordPress porque eles receberiam apenas um parâmetro; ou seja, eles obteriam um valor para modificar, mas nenhum segundo ou terceiro parâmetro para fornecer qualquer contexto. Ultimamente, e positivamente, no entanto, parece que a equipe principal do WordPress tem adicionado, com alegria (para mim) parâmetros extras para Filtrar Ganchos, para que você possa descobrir mais contexto. Um bom exemplo é o gancho posts_where; Acredito que algumas versões suportam apenas um parâmetro sendo o "where" class SQL da consulta atual, mas agora ele aceita a cláusula where e a para a instância atual da classe WP_Query que está invocando o gancho.

Então, qual é a diferença real?

Na realidade, os Ganchos de Filtro são praticamente um superconjunto de Ganchos de Ação. O primeiro pode fazer qualquer coisa que o último possa fazer e um pouco mais, embora o desenvolvedor não tenha a responsabilidade de retornar um valor com o Gancho de ação que ele ou ela faz com o Gancho do Filtro.

Dar Orientação e Intenção de Telegrafar

Mas isso provavelmente não é o que é importante. Eu acho que o importante é que, por um desenvolvedor escolher usar um gancho de ação versus um gancho de filtro ou vice-versa, eles estão telegrafando sua intenção e assim dando orientação para o desenvolvedor de plugins que pode ser usando o gancho. Em essência, eles estão dizendo "Eu vou te chamar, faça o que você precisa fazer" OU "Eu vou passar esse valor para modificar, mas certifique-se de passá-lo de volta . "

Então, em última análise Eu acho que a orientação fornecida pela escolha do tipo de gancho é o valor real por trás da distinção . OMI, de qualquer maneira.

Espero que isto ajude!

56
MikeSchinkel

Se você olhar a fonte para a função principal add_action(), é apenas um invólucro para a função add_filter() ...

E se você observar a função principal do_action(), ela é muito semelhante à função principal apply_filters(), com uma diferença muito importante: ela não retorna um valor.

Então o que isso quer dizer? as ações são como filtros, exceto que uma ação não retorna um valor, portanto, você não pode modificar os dados. Isso mostra que era simples criar o mecanismo de ação do WordPress simplesmente copiando o mecanismo de filtro e não retornando um valor. Basicamente, tudo que você pode fazer com uma ação é simplesmente executar uma função sem modificar algum valor.

11
trusktr

Em simples do Word.

Ações são aquelas PHP funções que executam a saída.

Filtros são aqueles PHP funções que retornam a saída.

Atualizado: Podemos estender qualquer plugin que use as ações e filtros sem modificar o código. Adicionando filtros e ações em nosso próprio tema ou plug-in.


Como usar?

Açao:

Confira abaixo exemplos simples no seu arquivo functions.php do tema.

  1. Exemplo 1: (Simple PHP example)
 teste de função () {
 echo "Saída"; 
} 
 
 teste (); 

Acima do programa imprima a saída:

Saída

[NOTA: Aqui teste () simplesmente chame a função. E execute a função de retorno de chamada 'teste'.]


  1. Exemplo dois: (uso simples da ação)
 function test1 () {
 echo "Output"; 
} 
 add_action ('teste', 'teste1'); 
 
 do_action ('teste'); 

Acima do programa imprima a saída:

Saída

[NOTA: Aqui, do_action('test') funciona como função de chamada. E execute a função de retorno de chamada 'test1'.]


  1. Exemplo três: (outro uso de ações)
 function test2 () {
 echo "Teste 2"; 
} 
 add_action ('teste', 'teste2', 1); 
 
 function test1 () {
 echo "Teste 1"; 
} 
 add_action ('teste', 'teste1', 2); 
 
 do_action ('teste'); 

Acima do programa imprima a saída:

 Teste 2Teste 1 

[NOTA: Aqui, do_action('test') funciona como função de chamada. E execute funções de callback em suas prioridades.

A função de retorno de chamada 'test1' tem prioridade 2 e 'test2' tem prioridade 1.]

Se as prioridades forem alteradas como 'test1' com prioridade 1 E 'test2' com prioridade 2, a saída será:

 Teste 1 Teste 2 

  1. Exemplo Quatro: (suporte de terceiros) Adicione o código abaixo em functions.php
 function test1 () {
 do_action ('test_before'); 
 echo "Test 1"; 
 do_action ('test_after'); 
 } 
 add_action ('teste', 'teste1'); 
 
 do_action ('teste'); 

Acima do programa imprima a saída:

 Teste 1 

Agora, crie um plugin de exemplo para verificar como ele funciona para desenvolvedores de terceiros.

  1. Crie a pasta 'simple' no diretório /wp-content/plugins/.
  2. Crie um arquivo chamado 'simple.php' e adicione o código abaixo.
/* 
 * Nome do plugin: Plugin simples 
 */
 Function test_callback_function () {
 Echo "Do plugin"; 
} 
 add_action ('test', 'test_callback_function'); 

Agora, ative nosso plugin simples do painel de administração do WordPress.

Ir para o plugin do menu e ativá-lo.

Depois de ativar o plugin acima do programa, imprima a saída:

 Teste 1Do plugin 

[NOTA: Se adicionarmos a prioridade para a ação do nosso plugin de 1 a 9, imprima a saída como:

 De pluginTest 1 

Porque o WordPress considera o 10 priority by default para todas as ações adicionadas.

Filtros

Confira os exemplos abaixo:

Exemplo simples PHP:

 $ data = array ('um', 'dois'); 
 print_r ($ data); 

Acima do programa imprima a saída:

 Matriz ([0] => um [1] => dois) 
  1. Exemplo 1: (uso simples do filtro)
 $ data = apply_filters ('my_filter_name', array ('um', 'dois')); 
 print_r ($ data); 
 
 add_filter (' my_filter_name ', function ($ old_data) {
 return array (' três ',' quatro '); 
}); 

Acima do programa imprima a saída:

 Matriz ([0] => três [1] => quatro) 

Aqui, adicionamos o filtro my_filter_name e alteramos a saída existente array( 'one', 'two' ) com array( 'three', 'four' ) sem alterar os arquivos de tema/plug-in.


4
maheshwaghmare