- Konu sahibi
- #1
WordPress hook, WordPress’in belirli bir işlem noktasında sizin kodunuzu çalıştırmanıza veya mevcut bir değeri değiştirmenize izin veren bağlantı noktasıdır. Böylece çekirdek dosyalarını değiştirmeden eklenti ya da temaya işlev ekleyebilirsiniz. Hook’lar iki ana gruba ayrılır: action bir olay gerçekleştiğinde işlem yapar, filter ise WordPress’in ürettiği bir değeri alıp değiştirerek geri verir.
Örneğin sayfanın alt kısmına metin eklemek için temanın dosyasını doğrudan düzenlemek yerine
Aşağıdaki ayrım, hangi fonksiyonu kullanacağınızı belirler:
Bir action içinde e-posta göndermek, kayıt oluşturmak veya ek HTML üretmek gibi işlemler yapılabilir. Bir filter içinde ise yazı başlığını, içerik metnini veya başka bir değeri değiştirebilirsiniz. Filter fonksiyonu aldığı değeri döndürmezse ilgili değer bozulabilir; bu nedenle
Aşağıdaki örnek, küçük bir eklenti dosyası olarak kullanılabilir.
Uygulamak için şu adımları izleyin:
Başarı durumunda mesaj, temanın footer bölümünün çağrıldığı yerde görünür. Mesaj görünmüyorsa önce eklentinin etkin olduğunu ve dosya adının
Bu örneğin sınırlaması, çıktının
Örnek eklenti tam dosyadır; içindeki PHP kodunu zaten açık PHP etiketi bulunan functions.php’ye ikinci bir <?php ile eklemeyin. Sabit metin çıktısı temsili bir demodur; dış girdileri uygun bağlama göre escape edin.
Aynı hook’a birden fazla fonksiyon bağlanabilir. Üçüncü parametre olan öncelik değeri, çalışma sırasını belirler; küçük öncelik sayısı önce çalışır; aynı öncelikte kayıt sırası kullanılır. Varsayılan öncelik10, accepted_args varsayılanı1’dir. accepted_args hook’un gerçekten gönderdiği argüman sayısını artırmaz.
Bir hook, fonksiyona parametre de aktarabilir. Kaç parametrenin alınacağını
Sorununuz belirli bir değeri değiştirmekse filter arayın; yalnızca bir olay gerçekleştiğinde kod çalıştırmak istiyorsanız action kullanın. Sonraki adım, seçtiğiniz hook’un ne zaman tetiklendiğini ve fonksiyonunuza hangi parametreleri verdiğini kontrol ederek kodu buna göre yazmaktır.
Hook kullanmak, değişikliği çekirdek veya tema dosyasından ayırır. Bu, tema değiştiğinde ya da güncellendiğinde kodun kaybolma riskini azaltır; ancak kullanılan hook’un temada gerçekten çağrılması gerekir.
İşlevin tema değişse de devam etmesi isteniyorsa eklentiye veya siteye özel bir eklentiye koymak daha uygundur. İşlev yalnızca belirli temanın sunumuyla ilgiliyse tema içindeki uygun bir dosyada tutulabilir.
Resmî hook belgesine ve tetikleyen çağrıya bakın: do_action işlem akışını, apply_filters değer dönüştürme akışını başlatır. Callback kaydında niyeti açık göstermek için action’a add_action, filter’a add_filter kullanın. Parametre sayısı ve hook’un ne zaman çağrıldığı ayrıca kontrol edilmelidir.
Örneğin sayfanın alt kısmına metin eklemek için temanın dosyasını doğrudan düzenlemek yerine
wp_footer action hook’una bağlanabilirsiniz. WordPress bu noktaya geldiğinde sizin fonksiyonunuzu çağırır.Action ve filter arasındaki fark
Aşağıdaki ayrım, hangi fonksiyonu kullanacağınızı belirler:
| Tür | Amacı | Fonksiyon | Geri dönüş |
|---|---|---|---|
| Action | Bir olay sırasında işlem yapmak veya çıktı üretmek | add_action() | Değer döndürmesi gerekmez |
| Filter | Mevcut bir değeri değiştirmek | add_filter() | Değiştirilmiş değeri döndürmelidir |
Bir action içinde e-posta göndermek, kayıt oluşturmak veya ek HTML üretmek gibi işlemler yapılabilir. Bir filter içinde ise yazı başlığını, içerik metnini veya başka bir değeri değiştirebilirsiniz. Filter fonksiyonu aldığı değeri döndürmezse ilgili değer bozulabilir; bu nedenle
return kullanımı zorunludur.Çalışan en küçük action örneği
Aşağıdaki örnek, küçük bir eklenti dosyası olarak kullanılabilir.
wp-footer-mesaji.php adında bir dosya oluşturup içine şu kodu yazın:
Kod:
<?php
/*
Plugin Name: WP Footer Mesaji
*/
function wfm_footer_mesaji() {
echo '<p>Bu mesaj wp_footer hook'u ile eklendi.</p>';
}
add_action( 'wp_footer', 'wfm_footer_mesaji' );
Uygulamak için şu adımları izleyin:
- Dosyayı WordPress kurulumunun
wp-content/plugins/klasörü içindeki ayrı bir klasöre yerleştirin; örneğinwp-footer-mesaji/wp-footer-mesaji.php. - Yönetim panelindeki eklenti listesinde
WP Footer Mesajieklentisini etkinleştirin. - Ziyaretçi tarafındaki bir sayfayı açıp sayfanın en alt bölümünde mesajı kontrol edin.
Başarı durumunda mesaj, temanın footer bölümünün çağrıldığı yerde görünür. Mesaj görünmüyorsa önce eklentinin etkin olduğunu ve dosya adının
.php ile bittiğini kontrol edin. Eklenti etkin olduğu hâlde çıktı yoksa tema wp_footer() çağrısını yapmıyor olabilir; bu durumda hook çalışacak noktaya ulaşamaz. Ayrıca eklenti dosyasında PHP sözdizimi hatası varsa WordPress dosyayı çalıştıramaz.Bu örneğin sınırlaması, çıktının
wp_footer action’ını kullanan temalarda görünmesidir. Hook’un var olması, her temanın veya her eklentinin onu mutlaka çağırdığı anlamına gelmez.Örnek eklenti tam dosyadır; içindeki PHP kodunu zaten açık PHP etiketi bulunan functions.php’ye ikinci bir <?php ile eklemeyin. Sabit metin çıktısı temsili bir demodur; dış girdileri uygun bağlama göre escape edin.
Öncelik ve parametre sayısı
Aynı hook’a birden fazla fonksiyon bağlanabilir. Üçüncü parametre olan öncelik değeri, çalışma sırasını belirler; küçük öncelik sayısı önce çalışır; aynı öncelikte kayıt sırası kullanılır. Varsayılan öncelik10, accepted_args varsayılanı1’dir. accepted_args hook’un gerçekten gönderdiği argüman sayısını artırmaz.
Bir hook, fonksiyona parametre de aktarabilir. Kaç parametrenin alınacağını
add_action() veya add_filter() çağrısındaki dördüncü parametreyle belirtmeniz gerekir. Hook’un sağladığından fazla parametre beklemek hataya yol açabilir. Bu nedenle kullanacağınız hook’un kabul ettiği argüman sayısını ilgili WordPress kodundan veya resmî geliştirici belgelerinden kontrol edin.Sık yapılan hatalar
- Filter fonksiyonunda değiştirilmiş değeri
returnetmemek. - Action/filter sözleşmesini karıştırmak: add_action teknik olarak add_filter altyapısını kullanır; yanlış fonksiyon adı her zaman kayıt hatası üretmez. Asıl fark do_action ile tetiklenen işte dönüşün kullanılmaması, apply_filters akışında ise dönen değerin sonraki callback’e verilmesidir.
- Fonksiyon adını yanlış yazmak ya da aynı isimde başka bir fonksiyonla çakıştırmak. Özel ve ayırt edilebilir bir ön ek kullanmak bu riski azaltır.
- Hook’u yanlış zamanda çalıştırmak. Örneğin WordPress kurulmadan önce WordPress fonksiyonlarını kullanmaya çalışmak beklenmeyen sonuç doğurabilir.
- Eklenti kodunu doğrudan WordPress çekirdek dosyasına eklemek. Güncelleme sırasında bu değişiklikler silinebilir.
Sorununuz belirli bir değeri değiştirmekse filter arayın; yalnızca bir olay gerçekleştiğinde kod çalıştırmak istiyorsanız action kullanın. Sonraki adım, seçtiğiniz hook’un ne zaman tetiklendiğini ve fonksiyonunuza hangi parametreleri verdiğini kontrol ederek kodu buna göre yazmaktır.
Kaynaklar
Sık sorulan sorular
Hook ile doğrudan tema dosyasını düzenlemek arasındaki fark nedir?
Hook kullanmak, değişikliği çekirdek veya tema dosyasından ayırır. Bu, tema değiştiğinde ya da güncellendiğinde kodun kaybolma riskini azaltır; ancak kullanılan hook’un temada gerçekten çağrılması gerekir.
Hook kodu tema yerine eklentide mi bulunmalı?
İşlevin tema değişse de devam etmesi isteniyorsa eklentiye veya siteye özel bir eklentiye koymak daha uygundur. İşlev yalnızca belirli temanın sunumuyla ilgiliyse tema içindeki uygun bir dosyada tutulabilir.
Bir hook’un action mı filter mı olduğu nasıl anlaşılır?
Resmî hook belgesine ve tetikleyen çağrıya bakın: do_action işlem akışını, apply_filters değer dönüştürme akışını başlatır. Callback kaydında niyeti açık göstermek için action’a add_action, filter’a add_filter kullanın. Parametre sayısı ve hook’un ne zaman çağrıldığı ayrıca kontrol edilmelidir.