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?
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.
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.
Temanın functions.php
dosyasındaki basit örneklere göz atın.
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.
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.]
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
functions.php
içinde aşağıdaki kodu ekleyinfonksiyon 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.
/wp-content/plugins/
dizininde 'simple' klasörünü oluşturun./* * 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.]
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)
$ 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.