it-swarm-eu.dev

Rozdíl mezi filtry a akčními háčky?

Nedávno jsem se díval na plugin API trochu hlouběji a byl jsem zvědavý jaké jsou skutečné rozdíly mezi akcí a filtračními háčky . Oba jsou události, které přijímají data jako parametr a zdají se být schopny dělat stejné věci.

Samozřejmě vidím, že akce se nazývají, když se akce provádějí a filtry se nazývají při manipulaci s daty, ale zdá se, že je to jen sémantický rozdíl v názvech.

Které skutečné rozdíly mezi nimi existují, kromě sémantiky a toho, na co se používají?

49
Sruly

Hi @Sruly:

Docela jste odpověděl na svou vlastní otázku, ale trochu se to rozvedu.

Akční háčky

Akce Hooks jsou určeny pro použití, když jádro aplikace WordPress nebo nějaký plugin nebo téma vám dává možnost v určitém bodě vložit kód a provést jednu nebo více z následujících akcí:

  1. Použijte echo to vložení nějakého HTML nebo jiného obsahu do vyrovnávací paměti odezvy,
  2. Změnit globální proměnný stav pro jednu nebo více proměnných a/nebo
  3. Změnit parametry předané vaší háčkové funkci (za předpokladu, že háček byl volán do_action_ref_array() namísto do_action(), protože druhý nepodporuje předávání proměnných podle odkazu .)

Filtrační háky

Filter Hooks chovají se velmi podobně jako Action Hooks , ale jejich zamýšlené použití je přijmout hodnotu a potenciálně vrátit upravenou verzi hodnoty. Háček filtru by mohl být také použit jako akční hák, tj. K modifikaci globální proměnné nebo generování nějakého HTML, za předpokladu, že to, co potřebujete udělat, když je zavolán háček. Jedna věc, která je velmi důležitá o filtr Hooks, že nemusíte se starat o akce Hooks je, že osoba, která používá filtr Hook musí vrátit (upravená verze) první parametr to prošlo. Častou chybou nováčka je zapomenout vrátit tuto hodnotu!

Použití dalších parametrů k poskytnutí kontextu v háčcích filtrů

Jako stranou Cítil jsem, že filtry Hooks jsou v dřívějších verzích WordPressu nakloněny, protože by dostaly pouze jeden parametr; to znamená, že by získali hodnotu pro úpravu, ale žádné druhé nebo třetí parametry, aby poskytli jakýkoliv kontext. V poslední době, a pozitivně však, zdá se, že WordPress jádro tým má radostně (pro mě) přidávání dalších parametrů do filtru Hooks, takže můžete objevit více souvislostí. Dobrým příkladem je háček posts_where; Věřím, že několik verzí je zpětně akceptováno pouze jedním parametrem, který je aktuálním dotazem "kde" třída SQL, ale nyní přijímá jak doložku kde a odkaz na aktuální instanci třídy WP_Query který vyvolává hák.

Takže jaký je skutečný rozdíl?

Ve skutečnosti jsou filtry Hooks do značné míry nadmnožinou Action Hooks. Ten první může udělat cokoli, co může udělat a o něco více, i když vývojář nemá odpovědnost vrátit hodnotu s háčkem Action, který dělá s filtrem Hook.

Poskytování poradenství a telegrafního záměru

Ale to asi není důležité. Myslím si, že je důležité, že vývojář, který se rozhodl použít akční háček proti filtračnímu háku nebo naopak, je telegrafuje svůj záměr a tedy dává pokyn osobě, která by mohla být pomocí háku. V podstatě říkají buď "Zavolám vám, udělejte vše, co potřebujete udělat" NEBO "Chystám se předat tuto hodnotu upravit, ale ujistěte se, že ji předáte zpět . "

Takže nakonec si myslím, že pokyny poskytované volbou typu háku jsou skutečnou hodnotou za rozlišením. IMO, stejně.

Snad to pomůže!

56
MikeSchinkel

Podíváte-li se na zdroj pro základní funkci add_action(), je to jen wrapper pro funkci add_filter() ...

A pokud se podíváte na jádrovou funkci do_action(), je to velmi podobné základní funkci apply_filters(), přičemž jeden klíčový rozdíl: nevrací hodnotu.

Co to tedy znamená? akce jsou jako filtry, kromě akce nevrací hodnotu, takže nemůžete měnit data. To ukazuje, že to bylo jednoduché vytvořit mechanismus akce WordPress 'jednoduše kopírování filtru mechanismus, a ne vracet hodnotu. V podstatě vše, co můžete udělat s akcí, je jednoduše vykonat funkci, aniž by se nějaká hodnota změnila.

11
trusktr

V jednoduchých slovech.

Akce jsou funkce PHP, které vykonávají výstup.

Filtry jsou funkce PHP, které vrátí výstup.

Aktualizováno: Můžeme rozšířit jakýkoliv plugin, který používá akce a filtry bez úpravy kódu. Přidáním filtrů a akcí do vlastního motivu nebo pluginu.


Jak používat?

Akce:

Zkontrolujte níže uvedené jednoduché příklady ve svém souboru functions.php.

  1. Příklad 1: (Jednoduchý PHP příklad)
 funkční test () {
 echo "Output"; 
} 
 
 test (); 

Nad programem vytiskněte výstup:

Výstup

[POZNÁMKA: Zde test () jednoduše zavolejte funkci. A spusťte funkci zpětného volání 'test'.]


  1. Příklad dva: (Jednoduché použití akce)
 function test1 () {
 echo "Output", 
} 
 add_action ('test', 'test1'); 
 
 do_action ('test'), 

Výše uvedený program vytiskne výstup:

Výstup

[POZNÁMKA: Zde do_action('test') funguje jako funkce volání. A spusťte funkci zpětného volání 'test1'.]


  1. Příklad tři: (Další použití akcí)
 function test2 () {
 echo "Test 2"; 
} 
 add_action ('test', 'test2', 1); 
 
 function test1 () {
 echo "Test 1"; 
} 
 add_action ('test', 'test1', 2); 
 
 do_action („test“), 

Nad programem vytiskněte výstup:

 Test 2Test 1 

[POZNÁMKA: Zde do_action('test') funguje jako funkce volání. A spusťte funkce zpětného volání na svých prioritách.

Funkce zpětného volání 'test1' má prioritu 2 a 'test2' má prioritu 1.]

Pokud se priority změní jako 'test1' s prioritou 1 a 'test2' s prioritou 2, pak bude výstup:

 Test 1Test 2 

  1. Příklad čtyři: (podpora třetí strany) Přidat kód níže v functions.php
 function test1 () {
 do_action ('test_before'); 
 echo "Test 1"; 
 do_action ('test_after'); 
 } 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

Nad programem vytiskněte výstup:

 Test 1 

Nyní vytvořte ukázkový plugin pro kontrolu, jak funguje pro vývojáře třetích stran.

  1. V adresáři /wp-content/plugins/ vytvořte složku 'simple'.
  2. Vytvořte soubor s názvem 'simple.php' a přidejte kód níže.
/* 
 * Plugin Name: Simple Plugin 
 */
 Function test_callback_function () {
 Echo "Z pluginu"; ]} 
 add_action ('test', 'test_callback_function'); 

Aktivujte náš Jednoduchý plugin z řídicího panelu aplikace WordPress admin.

Přejděte na plugin pluginu a aktivujte jej.

Po aktivaci pluginu výše uvedený program vytiskne výstup:

 Test 1Z pluginu 

[POZNÁMKA: Pokud přidáme prioritu pro naši činnost pluginu od 1 do 9, vytiskne výstup jako:

 Z pluginTest 1 

Protože WordPress zvážit 10 priority by default pro všechny přidané akce.]

Filtry

Podívejte se na níže uvedené příklady:

Jednoduchý příklad PHP:

 $ data = array ('one', 'two'); 
 print_r ($ data); 

Výše uvedený program vytiskne výstup:

 Array ([0] => jeden [1] => dva) 
  1. Příklad 1: (Jednoduché použití filtru)
 $ data = apply_filters ('my_filter_name', array ('one', 'two')); 
 print_r ($ data); 
 
 add_filter (' my_filter_name ', function ($ old_data) {
 návratové pole (' tři ',' čtyři '); 
}); 

Výše uvedený program vytiskne výstup:

 Array ([0] => tři [1] => čtyři) 

Zde jsme přidali filtr my_filter_name a změnili stávající výstup array( 'one', 'two' ) s array( 'three', 'four' ) bez změny souborů motiv/plugin.


4
maheshwaghmare