it-swarm.asia

Filtre ve Eylem Kancaları Arasındaki Fark?

Eklenti API'sine son zamanlarda biraz daha derinlemesine bakıyordum ve merak ediyordum eylem ve filtre kancaları arasında gerçek farklar vardı. İkisi de parametre olarak veri alan olaylardır ve her ikisinin de aynı şeyleri yapabileceği görülmektedir.

Açıkçası, eylemler gerçekleştiğinde eylemlerin çağrıldığını ve veriler manipüle edildiğinde filtrelerin çağrıldığını görüyorum, ancak bu sadece anlamsal bir adlandırma farkı gibi görünüyor.

Anlambilim dışında ve ne için kullanıldığı, aralarında ne gibi gerçek farklılıklar var?

49
Sruly

add_action() core işlevi kaynağına bakarsanız, bu sadece add_filter() işlevi için bir sarıcı ...

Ve eğer do_action() core fonksiyonuna bakarsanız, apply_filters() core fonksiyonuna çok benzer, biri çok önemli bir farkla: bir değer döndürmez.

Peki bu ne anlama geliyor? İşlemler, filtreler gibidir, çünkü işlem bir değer döndürmez, bu nedenle verileri değiştiremezsiniz. Yalnızca filtre mekanizmasını kopyalayarak ve bir değer döndürmeyerek WordPress'in eylem mekanizmasını oluşturmanın basit olduğunu gösteriyor. Temel olarak, bir eylemle yapabileceğiniz tek şey, bazı değerleri değiştirmeden basitçe bir işlevi çalıştırmaktır.

11
trusktr

Basit Word'lerde.

Eylemler bunlar çıkışı yürüten PHP işlevleridir.

Filtreler çıktıyı döndüren PHP işlevleridir.

Güncellenme: Buradaki kodu değiştirmeden eylemleri ve filtreleri kullanan herhangi bir eklentiyi genişletebiliriz. Kendi temamıza veya eklentimize filtreler ve eylemler ekleyerek.


Nasıl kullanılır?

Aksiyon:

Temanın functions.php dosyasındaki basit örneklere göz atın.

  1. Örnek Bir: (Basit PHP örnek)
 fonksiyon testi () {
 echo "Çıkış"; 
} 
 
 testi (); 

Yukarıdaki program çıktısını yazdırır:

Çıktı

[NOT: İşte test () sadece işlevi çağırın. Ve geri arama işlevini 'test' yapın.


  1. İkinci Örnek: (Basit Eylem Kullanımı)
 fonksiyon testi1 () {
 echo "Çıktı"; 
} 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

Yukarıdaki program çıktısını yazdırır:

Çıktı

[NOT: Burada do_action('test') işlevi çağırmak gibi çalışır. Ve geri çağırma işlevini 'test1' yürütün.]


  1. Örnek Üç: (Eylemlerin başka bir kullanımı)
 fonksiyon test2 () {
 echo "Test 2"; 
} 
 add_action ('test', 'test2', 1); 
 
 fonksiyon testi1 () {
 echo "Test 1"; 
} 
 add_action ('test', 'test1', 2); 
 
 do_action ('test'); 

Yukarıdaki program çıktısını yazdırır:

 Test 2Test 1 

[NOT: Burada do_action('test') işlevi çağırmak gibi çalışır. Ve geri arama fonksiyonlarını önceliklerine göre yürütün.

Geri arama işlevi 'test1' 2 önceliğe sahiptir ve 'test2' 1 önceliğine sahiptir.]

Öncelikler öncelik 1 ile 'test1' ve öncelik 2 ile 'test2' gibi değişiyorsa, çıktı şöyle olacaktır:

 Test 1Test 2 

  1. Örnek Dört: (3. parti desteği) functions.php içinde aşağıdaki kodu ekleyin
 fonksiyon test1 () {
 do_action ('test_before'); 
 echo "Test 1"; 
 do_action ('test_after'); 
 } 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

Yukarıdaki program çıktısını yazdırır:

 Test 1 

Şimdi, 3. parti Geliştirici için nasıl çalıştığını kontrol etmek için örnek bir eklenti oluşturun.

  1. /wp-content/plugins/ dizininde 'simple' klasörünü oluşturun.
  2. 'Simple.php' adında bir dosya oluşturun ve aşağıdaki kodu ekleyin.
/* 
 * Eklenti Adı: Basit Eklenti 
 */
 İşlevi test_callback_function () {
 Echo "Eklentiden"; 
} 
 add_action ('test', 'test_callback_function'); 

Şimdi, Basit eklenti 'yi WordPress admin panelinden etkinleştirin.

Menü eklentisine gidin ve etkinleştirin.

Programın yukarısındaki eklentiyi etkinleştirdikten sonra çıktıyı yazdırın:

 Eklentiden 1'ini test et 

[NOT: Eklenti işlemimiz için önceliği 1'den 9'a kadar eklersek, çıktı şöyle yazdırır:

 PluginTest 1'den 

Çünkü, WordPress, eklenen tüm eylemler için 10 priority by default değerini göz önünde bulundurur.]

Filtreler

Aşağıdaki örnekleri kontrol edin:

Basit PHP örnek:

 $ veri = dizi ('bir', 'iki'); 
 print_r ($ veri); 

Yukarıdaki program çıktısını yazdırır:

 Dizi ([0] => bir [1] => iki) 
  1. Örnek Bir: (Basit Filtre Kullanımı)
 $ data = application_filters ('my_filter_name', dizi ('bir', 'iki')); 
 print_r ($ data); 
 
 add_filter (' my_filter_name ', function ($ old_data) {
 return dizisi (' three ',' four '); 
}); 

Yukarıdaki program çıktısını yazdırır:

 Dizi ([0] => üç [1] => dört) 

Burada, my_filter_name süzgecini ekledik ve tema/eklenti dosyalarını değiştirmeden array( 'one', 'two' ) ile varolan çıktısını array( 'three', 'four' ) değiştirdik.


4
maheshwaghmare