Eklenti geliştiricisi olarak WordPress'in en sevdiğim yanı kanca (hook) yapısı. Bu yapıyı kullanarak WordPress'in çekirdek dosyalarına müdahale etmeden, WordPress'in çalışmasına müdahale edebiliyoruz. Örneğin, bir eklenti yazdınız ve eklentinizin bir CSS dosyası ya da JavaScript dosyası kullanıyor, bu dosyalara bağlantı vermek için normalde temanın header.php dosyasına eklemeler yapmanız gerekir ancak WordPress'in kanca yapısını kullanarak wp_head isimli kancaya bir fonksiyon takarak bu dosya bağlantılarını kolaylıkla header.php kısmına ekleme şansına sahip oluyoruz. Peki kendi eklentilerimizde ya da temalarımızda kendi kancalarımızı kullanabilir miyiz? Cevap, 'EVET'.
Kendi kancanızı oluşturmak size ne kazandıracak. Geliştirdiğiniz eklenti ya da temaya diğer geliştiricilerin kolayca müdahale etmelerine olanak sağlayabileceksiniz ya da eklentinize yeni özellikler katarken daha anlaşılır bir yapı oluşturabileceksiniz.
Nasıl Yapabilirim?
Kendi kancanızı oluştururken diyelim ki amacımız oluşturduğumuz bir listeye yeni maddeler eklenmesine imkan vermek isteyelim. Bunun için aşağıdaki gibi, bir liste oluşturan fonksiyonumuz olsun. Fonksiyonun yaptığı iş basit bir liste oluşturuyor ve kod içerisinde geçen do_action('benim_listem') koduyla 'benim_listem' adında bir kanca oluşturmuş olduk. Artık isteyenler bu kancayı kullanarak, yeni maddeleri ekleme şansına sahip olacaklar.
- function kendi_fonksiyonumuz(){
- echo '<ul>';
- echo '<li>Madde 1</li>';
- echo '<li>Madde 2</li>';
- echo '<li>Madde 3</li>';
- do_action('benim_listem');
- //benim_listem adında bir kanca oluşturduk
- //bu kancayı kullanarak buraya yeni maddeler eklenebilir.
- echo '</ul>';
- }
'benim_listem' isimli kancayı kullanarak şimdi de 4. ve 5. maddeleri bu listeye kendi fonksiyonumuzu ekleyelim. Bunun için aşağıdaki gibi basit bir kodu kendi eklentiniz ya da temanızda kullanmanız ya da başkalarının kullanması yeterli.
- function yeni_maddeler_ekle() {
- echo '<li>Madde 4</li>';
- echo '<li>Madde 5</li>';
- }
- add_action('benim_listem', 'yeni_maddeler_ekle');
Kod içerisinde geçen add_action fonksiyonu istediğiniz kancaya, kendi fonksiyonunuzu takmaya yarıyor. Artık do_action('benim_listem') kodunun geçtiği her yerde bizim fonksiyonumuz da çağırılacak.
Daha Gelişmiş Kanca Oluşturuyoruz
Basitçe kendi kancamızı oluşturmuş olduk. Ancak WordPress bize kancalara takılan fonksiyonlara parametre yollama imkanı da tanıyor. Mesela kancamızı çağıran fonksiyona $post->ID değişken değerini parametre olarak göndermek ya da daha fazla sayıda parametreyi aynı anda yollamak isteyebiliriz. Bunun için kancamızı yukarıdaki gibi değil aşağıdaki gibi tanımlamamamız gerekli.
- //diğer kodlarınız...
- do_action('kanca1', $post->ID);
- //kanca1'e takılan fonksiyona $post->ID parametresini yollar
- do_action('kanca2', $post->ID, $comment->ID);
- //kanca2'ye takılan fonksiyona $post->ID ve $comment->ID değişkenlerini beraber yollar
- //diğer kodlarınız...
kanca1'e takılan fonksiyona artık $post->ID değişkeninin değeri gönderilecektir. Tabi ki bunu sağlamak için de add_action fonksiyonunda değişiklikler yapmamız gerekir. add_action fonksiyonu kullanılırken genel olarak aşağıdaki gibi parametreler verilebilir.
- add_action('kanca_adi', 'fonksiyon_adi', 'oncelik', 'parametre_sayisi');
Kullanımdan da anlayacağınız üzere kancalara öncelik vererek, fonksiyonumuzun hangi sırada çalışmasını istediğimizi belirleyebiliyoruz. Bu parametrenin varsayılan değeri 10'dur. Ayrıca kancanın fonksiyonumuza kaç tane parametre yollayacağını da parametre_sayisi kısmında belirtiyoruz, varsayılan olarak 1'dir. kanca1'i kullanmak için add_action fonksiyonunu aşağıdaki gibi kullanabiliz.
- function fonksiyon1($yaziID) {
- echo $yaziID;
- }
- add_action('kanca1', 'fonksiyon1', 10, 1);
- //kanca1 fonksiyona 1 tane parametre yolladığından yukarıdakinin yerine aşağıdakiyle de varsayılan değerlerle tanımlama yapabiliriz.
- add_action('kanca1', 'fonksiyon1);
Dikkat ettiyseniz kanca eğer tek parametre yolluyorsa bu durumda kodda geçen ikinci örneği kullanmak daha mantıklı.
kanca2'ye takılan fonksiyona $post->ID ve $comment->ID değişkenlerinin değeri aynı anda yollanmaktadır. Dolayısıyla bu kancayı kullanacak olan fonksiyon, iki parametre alacak şekilde tanımlanmalı ve add_action fonksiyonu kullanılırken iki parametrenin de yollanması istenmelidir.
- function fonksiyon1($yaziID, $yorumID) {
- echo $yaziID;
- echo $yorumID;
- }
- add_action('kanca2', 'fonksiyon1', 10, 2);
- add_action('kanca2', 'fonksiyon2', 20, 2);
Koddaki birinci add_action fonksiyonunda geçen 2 rakamı, kancanın kendisini kullanan fonksiyona gönderdiği parametre sayısıdır. Kendi kancanızda daha fazla değişkeni fonksiyonlara yollayabilirsiniz.
Kodda ikinci add_action fonksiyonunda 'fonksiyon2' ismindeki fonksiyonun önceliği 20 olarak atanmış. Bu durumda kanca2 çağırıldığında önce fonksiyon1 ardından da fonksiyon2 çalıştırılacaktır. Öncelik meselesi de budur. Bazı durumlarda gerekebilir, özellikle yazı içeriklerine (the_content kancasıyla) müdahale ederken öncelikleri doğru belirlemediğinizde karışıklıklar ortaya çıkabiliyor.
do_action, add_action fonksiyonları yanında apply_filter ve add_filter fonksiyonlarını incelemenizi tavsiye ederim.
Kaynak
Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=882.
Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.
Tarih: 13 Haziran 2009 Saat: 22:52
(L) WordPress