WordPress için eklenti yazmak…-4

WordPress için eklenti yazmak…-4

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.

(?) the_content olarak bildiğimiz içerik bölgesinin öncesine veya sonrasına yerleştirebiliyoruz eklentimizin değerlerini. İçeriğin arasına da serpiştirebiliyoruz, ancak bu basit bir eklenti olacağından öncesi veya sonrasını kullanmak daha iyi ve basit olacaktır.

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.

  1. Eklentimizi sadece tekil yazılar için yazmışsak.
  2. 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

17 thoughts on “WordPress için eklenti yazmak…-4”

  1. Çok teşekkürler harika bir seri olmuş. Birde Jquery ve harici css, js dosyalarının eklentilerde nasıl kullanılacağına değinirseniz harika olur.

    1. Vectorman,

      İlginize teşekkür ederim. Diğer konulara ilerleyen yazılarda değineceğiz. Şu sıralar elimdeki işlerden dolayı biraz zaman sorunu oluyor. Bu zaman sorunu ortadan kalktıktan sonra onları da anlatmaya çalışacağım.

  2. Üstad gerçekten çok güzel bir konuyu çok güzel bir şekilde anlatmışsın.Ne kadar teşekkür etsem azdır.Eline, Emeğine Sağlık.Bundan sonra siten tarayıca sürekli açık olacak :) Başarılar…

  3. 1 den başladım okudum çok faydalı çok güzel teşekkür ediyorum

  4. Hocam yazıların tamamını okudum, ellerinize sağlık gayet güzel yazmışsınız.

    PHP de çok eskiyim ama wordpress te yeniyim. Bu yazdığımız eklentiyi nasıl aktif edeceğimizi anlatmamışsınız. Acaba yazdığımız bu eklentiyi wordpress e nasıl ekleyebiliriz.

    Teşekkür ederim.

    1. Öncelikle ben teşekkür ederim :)

      Sitenin kurulu olduğu alanda wp-content klasörü bulunur. Onun içinde plugins adında bir klasör daha vardır. Yazdığımız, düzenlediğimiz eklentileri bu plugins klasörünün içerisine atıyoruz.

      Daha sonra yönetim paneline giderek eklentiler bölümünde Yüklü eklentiler alanına geçiş yapıp etkinleştiriyoruz.

  5. Anlatımınız çok iyi. WordPress e yeni başladım ve türkçe kaynak neredeyse yoktu ve sizi buldum sonunda :) Yapmış olduğunuz eklentiyi değişirerek ufak bir eklenti yaptım. Bu eklentiyi bileşenler bölümünde nasıl gösterebilirim ?

    1. Tarık onun için eklentinle aktif olacak bir bileşen (widget) alanı yazman gerekebilir. Bu konuyla ilgili bir makalem yok şu an için seni yönlendirebileceğim.

  6. Hocam Elinize sağlık faydasını hala devam ettiren bir yazı..

Comments are closed.