Evet, nerede kalmıştık. Eklentimizin artık son kodlamalarına geçiyoruz yavaş yavaş. Ne eklentisi diyenler için WordPress için eklenti yazmak… , WordPress için eklenti yazmak…-2 ve WordPress için eklenti yazmak…-3 yazılarını dikkatle okumalarını tavsiye ediyorum. Eğer bu yazıyla ilk defa karşılaşıyorsanız lütfen diğerlerine göz atınız.
Eklentimizin %90 kadarını yazmıştık hatırlarsanız. Şimdi ise bunu sitemizdeki yazılarımızın, sayfalarımızın ya da anasayfamızın içerisine nasıl ekleriz ve eklentimizi sonlandırırız onu görelim.
Başlayalım…
Öncelikle bu yazı içerisinde WordPress’in is_single(), is_page(), is_home(), add_filter() özelliklerini kullanacağız. Bu fonksiyonlardan bazılarına aşina olabilirsiniz. Ama aşina değilseniz merak etmeyin açıklayacağım :) Ayrıca fonksiyon isimlerine tıklayarak WordPress Codex sayfasından da bilgi edinebilirsiniz.
is_single() : WordPress in koşul kontrol etiketidir. Yani yaptığı şey, kullanılacak durum ve fonksiyonların gerekli tekil yazılarda (makalelerinizde, paylaşımlarınızda, içeriğinizin görüntülendiği yerlerde) gösterilip gösterilmemesi gerektiğini kontrol eder ve belirtilen özelliklere göre işlemin yapılmasını sağlar.
is_page() : is_single() fonksiyonuyla aynı işleve sahiptir. Sadece sayfaları kontrol ederek işlemini gerçekleştirir.
is_home() : is_single() fonksiyonuyla aynı işleve sahiptir. Sadece anasayfanızı kontrol ederek işlemini gerçkeleştirir.
add_filter() : Başlık, içerik gibi alanların içerisine eklenti kodlarımızı aktarmaya yarayan faydalı bir fonksiyondur.
Bu açıklamaların dışında is_single() ve is_page() içerisine gerek yazılarınızın/sayfalarınızın idleri ve sayfaların nicename olarak belirtilen seo uyumlu, Türkçe karakter içermeyen isimlerini kullanabiliyoruz. Bu konu başka bir makale içeriği, o da ayrı bir mevzu :)
Neyse, geçelim son kısma. Eklentimizin nerede ve içeriğin neresinde(?) göstereceğimiz konusunda gerekli kodları yazmaya başlayalım.
Yerimize karar verelim
Öncesine mi?, Sonrasına mı? Biz bu işi sonrasına ekleyerek yapalım. Tabii ki öncesi için gerekli kodları da size aktaracağım.
add_filter ve the_content
the_content bizim asıl içeriğimizi çağıran, yazılarımın görüntülenmesini sağlayan fonksiyonumuzdur. Bunun içerisine düzenlemelerimizi, eklenti içeriklerimizi ekleyebilmek için add_filter fonksiyonundan yararlanmamız gerekmekte. Bunu da şöyle yapıyoruz. Örnek olarak eklentimiz için gerekli bir fonksiyonumuz vardı hatırlarsanız. Onu geliştirip (eklentimizin kaydettiği veriyi çağırmasını söyleyerek) düzenleyelim.
/* Fonksiyon yazalım */function merhaba_dunya() { echo "Merhaba Dünya"; }
Yukarıdaki basit hali. Şimdi eklentimizin değerini çağırmak için get_option (keza üçüncü yazıda da bashetmiştim) kullancağız.
/* Fonksiyon yazalım */function merhaba_dunya() { $eklenti_bilgisi=get_option('eklenti_secenek'); return $eklenti_bilgisi; }
Gördüğünüz üzere kodumuzdan echo satırını attık ve get_option kullanarak eklenti seçeneğimiz olan bilgiyi çektik. Bu fonksiyon merhaba_dunya();
olarak çağrılırsa şayet eklenti bilgisi alanındaki içeriğimiz gelecektir. Ama biz bunu içerik alanına kendi eklenmesi için ayarlayacağız. add_filter burada devreye giriyor ve kodumuz;
/* Fonksiyon yazalım */function merhaba_dunya($content) { //$content içeriğin kendisini çağırmak ve işlemek için gerekli $eklenti_bilgisi = get_option('eklenti_secenek'); $content .= $eklenti_bilgisi; return $content; } add_filter('the_content','merhaba_dunya');
Hey hey, ne oldu bu koda böyle der gibisiniz değil mi :) Şimdi öncelikle $content
içeriğimizi düzenleyebilmemiz için gerekli. Bunu fonksiyona tanıtıyoruz ki neyi nereden alacağını ve işleyeceğini anlasın. Böylelikle $eklenti_bilgisi
değerimizi içeriye aktarabiliyoruz. Bu kodla birlikte eklenti ile yazdığımız her değer otomatik olarak tüm site içeriğimzin sonunda yer alacak. Yani tekil yazı, anasayfa, sayfalar farketmeden tüm the_content
içeren alanlara aktaracak. Burada iki sorunumuz olabilir.
- Eklentimizi sadece tekil yazılar için yazmışsak.
- Eklenti verimizin içeriğin öncesinde gelmesini istiyorsak.
Burada kurtarıcımız olarak is_page, is_home ve is_single araya giriyor. Ama ondan önce bir ufak detay var onu da aktarayım söz geçiyorum sayfa ve anasayfa mevzuna.
Farkettiniz mi bilmiyorum $content alanının karşısındaki eşittir (=) işaretinden önce bir nokta (.) ekledim. Bu nokta gerekli. Şunun için gerekli, biz burada $content alalnına ekstra birşey eklemeye çalışıyoruz. Sonuna eklemek için de nokta işaretini kullanıyoruz. Bu ekleme durumu bir fonksiyon ya da bir satır içerisinde olsa şöyle olurdu.
$content = "bla bla"; echo $abc = $content.'Sonrasına eklenecek deneme';
Şayet öncesine ekleseydik;
$content = "bla bla"; echo $abc = 'Öncesine eklenecek deneme '.$content;
Durumlar bundan ibaret. Şimdi WordPress için bunu yapalım. Biraz değişik olacak ama hemen hemen aynı mantıkta.
/* Fonksiyon yazalım */function merhaba_dunya($content) { //$content içeriğin kendisini çağırmak ve işlemek için gerekli $eklenti_bilgisi = get_option('eklenti_secenek'); $eklenti_bilgisi .= $content; return $eklenti_bilgisi; } add_filter('the_content','merhaba_dunya');
Burada değişen aslında çok basişt olarak değişkenlerin yerleri. Burada fonksiyonumuza $content
değişkeninin içe aktarılacağı bilgisini katıyoruz. Böylelikle eklentimiz tarafından kaydedilen değer önce, içerik bilgisi sonra çağırılmış oluyor.
Sonlandıralım
Yazının üst kısımlarında bir yerde eklentimizin değeri sonradan göstermesi üzerinden hemfikir olduğumuz konusunda birşey hatırlıyorum. Böyle yapalım :) Tek bir durum kaldı. Eklentimizi tam olarak nasıl göstereceğiz. Yani sadece tekil yazıda görünmesini istediğimiz bir eklenti olduğunu varsayarsak is_single()
fonksiyonunu kullanmamız gerekmekte. Böyle yapalım. Fonksiyonumuz is_single ile donatılınca;
/* Fonksiyon yazalım */function merhaba_dunya($content) { if (is_single()) { $eklenti_bilgisi = get_option('eklenti_secenek'); $content .= $eklenti_bilgisi; } return $content; } add_filter('the_content','merhaba_dunya');
Gördüğünüz gibi oluyor. Bu durumda eklentimiz sadece tekil yazılarda görünecek, bunu sayfalarda göstermek için is_page()
, anasayfada göstermek için is_home()
kullanmak gerekir. Böylelikle değerimiz istediğimiz yerde görünmüş olur.
Eklentimizi bitirdik. Bir sonraki yazımda eğer çekebilirsem video anlatımla eklentimizi WordPress Eklenti tabanına eklemeyi göstereceğim. Çok uzun olmayan bir yazı yazmak istemiştim ama fonksiyon açıklamaları uzun.
Eklentinin son hali.
<?php /* Plugin Name: Eklenti Adı Plugin URI: Eklenti linki (sitenizden bir link olabilir) Description: Eklenti Açıklaması Version: Versiyon (0.1 gibi) Author: Adınız Soyadınız ya da hangi ismi kullanmak istiyorsanız Author URI: Varolan site adresiniz License: GNU *//* Direkt Çağrıları Engelleyelim */if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); } //Varsayılan Değer Atayalım register_activation_hook(__FILE__, 'eklenti_varsayilan'); function eklenti_varsayilan( ) { add_option('eklenti_secenek', 'Merhaba Dünya!'); } //Değerleri Silelim register_deactivation_hook(__FILE__, 'eklenti_kaldirildi'); function eklenti_kaldirildi( ) { delete_option('eklenti_secenek'); } /* Admin Alanı İçin Sayfa Linki ve Sayfamızı Oluşturalım */add_action('admin_menu', 'eklentim_yonetim'); function eklentim_yonetim() { add_options_page('Eklentim','Eklentim', '8', 'eklentim', 'eklentim_fonks'); } function eklentim_fonks() { //Değerlerimizi güncelleyelim if ($_POST['gizli'] == 'tmm') { //Gönderdiğimiz veriyi alalım $bizim_verimiz = $_POST['merhaba']; update_option('eklenti_secenek', $bizim_verimiz); ?> <div class="updated"><p><strong><?php _e('Options saved.'); ?></strong></p></div> <?php } ?> <div style="margin-top:10px;"> <h2>Eklentim Yönetim Sayfası</h2> <form method="post" action='<?php echo $_SERVER["REQUEST_URI"]; ?>'> <label for="merhaba">Göstermek İstediğiniz Yazıyı Yazın</label> <input type="text" id="merhaba" name="merhaba" value="<?php echo get_option('eklenti_secenek'); ?>"/><br /> <input type="hidden" id="gizli" name="gizli" value="tmm"/><br /> <input type="submit" id="submit" name="submit" class="button-primary" value="<?php _e('Save Changes'); ?>"/> </form> </div> <?php } /* Fonksiyon yazalım */function merhaba_dunya($content) { if (is_single()) { $eklenti_bilgisi = get_option('eklenti_secenek'); $content .= $eklenti_bilgisi; } return $content; } add_filter('the_content','merhaba_dunya'); ?>
Sabrınız ve ilginiz için teşekkür ederim. Aklınıza takılan her soruyu gerek yorum kısmından gerekse iletişim bölümünden iletebilirsiniz. Elimden geldiğince hızlı bir şekilde cevap vermeye çalışırım.
İlk Yazı : WordPress için eklenti yazmak…
İkinci Yazı : WordPress için eklenti yazmak…-2
Üçüncü Yazı : WordPress için eklenti yazmak…-3
Selametle