23 Mayıs 2009

WordPress 2.8 İçin Bileşen Yazıyoruz

WordPress Yorum Ekle

WordPress 2.8 ile birlikte yeni bir bileşen API'si (Application Programming Interface - Uygulama Programı Arabirimi) geliyor. API bileşen geliştiricilerine WordPress bileşeni oluşturmak için gerekli bütün fonksiyonları nesne yönelimli bir sistem ile sunuyor. Ayrıca her bileşenin birden fazla kez kullanılmasına da izin veriyor.
API'yi wp-includes/widget.php dosyasında bulabilirsiniz ayrıca artık WP'nin kendine ait olan bileşenleri wp-includes/default-widgets.php dosyasına taşınmış durumda. Bu dosya içerisindeki bileşen yapılarına bakarak kendi bileşeniniz için yeni özellikleri nasıl kullanabileceğinizi öğrenebilirsiniz. WP_Widget sınıfı bileşenlerin fonksiyonlarını yönetiyor ve her bileşen bu sınıfı kullanarak oluşturulmak zorunda. WP_Widget_Factory sınıfı ise desteklenen bileşenlerin kurulum ve kayıtlarından sorumludur.

WordPress 2.8 Uyumlu Bileşen Yazıyoruz

Yazacağımız bileşenin yapacağı iş çok basit, bileşen yazı ve yorumlarımız için yan menüde RSS adreslerimizi gösterecek. Bağlantıları oluştururken de bizim girdiğimiz bağlantı başlıklarını kullanacak.
Bileşen iskeletimizi oluşturmak için aşağıdaki kodları temanızın Tema Fonksiyonları (functions.php) dosyasına ekleyin.

  1. class My_RSS_Widget extends WP_Widget {
  2.   function My_RSS_Widget() {
  3.    //Bileşen için tanımlamaların yapıldığı kısım
  4.   }
  5.  
  6.  function widget($args, $instance) {
  7.    // Bileşenin sitedeki görüntüsünün oluşturulduğu kısım
  8.  }
  9.  
  10.  function update($new_instance, $old_instance) {
  11.   //Ayarların kaydedildiği kısım
  12.  }
  13.  
  14.  function form($instance) {
  15.    //Bileşenler bölümündeki formun oluşturulduğu kısım
  16.  }
  17. }
  18. register_widget('My_RSS_Widget');
  19. //Bileşeni kaydet, sisteme ekle

My_RSS_Widget isimli bir sınıfı WP_Widget sınıfının bütün özellik ve fonksiyonlarını miras alacak şekilde oluşturduk. Yeni bileşen sınıfımızda widget ve update fonksiyonları her zaman tanımlanmalıdır. form fonksiyonunun tanımlanması opsiyoneldir. Eğer tanımlamazsanız, Bileşenler bölümünde bileşene ait herhangi bir form görüntülenmeyecektir. register_widget('My_RSS_Widget'); kodu ile ise bileşeni kaydettik. Şimdi de fonksiyonlarımızın içeriğini dolduralım. Kodlar içerisindeki yorum satırları ilgili kısmı ne için yazdığımızı açıklamaktadır.

class My_RSS_Widget extends WP_Widget {
function My_RSS_Widget() {
//Bileşen ana fonksiyonu
$widget_ops = array('classname' => 'widget_rss_links', 'description' => 'Besleme bağlantıları için liste' );
//Bileşen için başlık ve açıklama tanımlıyoruz
$this->WP_Widget('rss_links', 'Besleme Bağlantılarım', $widget_ops);
//Bu bilgileri kullanarak Besleme Bağlantılarım adında bileşeni yarat
//Bkz. Resim 1
}

function widget($args, $instance) {
//Sitemizin yan menüsünde bileşenin göstereceklerini tanımlıyoruz
extract($args, EXTR_SKIP);
echo $before_widget;
$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
//Girilen Başlık değerini alıyoruz
//Artık get_options kullanmıyoruz
$entry_title = empty($instance['entry_title']) ? ' ' : apply_filters('widget_entry_title', $instance['entry_title']);
$comments_title = empty($instance['comments_title']) ? ' ' : apply_filters('widget_comments_title', $instance['comments_title']);
if ( !empty( $title ) ) {
echo $before_title . $title . $after_title;
//Başlık girilmişse yaz
};
//Bileşen içeriğini yazdırıyoruz
echo '

';echo $after_widget;
}

function update($new_instance, $old_instance) {
//Bileşen ayarları kaydedildiğinde bu fonksiyon
//çağırılır ve değerler fonksiyona dizi olarak aktarılır
$instance = $old_instance;
//Eski değerleri alıyoruz
$instance['title'] = strip_tags($new_instance['title']);
//Bileşen formundan gelen değerleri diziye aktarıyoruz
$instance['entry_title'] = strip_tags($new_instance['entry_title']);
$instance['comments_title'] = strip_tags($new_instance['comments_title']);
return $instance;
//Son değerleri döndürüyoruz
}

function form($instance) {
$instance = wp_parse_args( (array) $instance, array( 'title' => '', 'entry_title' => '', 'comments_title' => '' ) );
//Eğer daha önceden ayar kaydedilmemişse
//Değişkenlere varsayılan olarak boş değer atıyoruz
//Eğer varsayılan değerleriniz varsa buraya yazabilirsiniz.

$title = strip_tags($instance['title']);
$entry_title = strip_tags($instance['entry_title']);
$comments_title = strip_tags($instance['comments_title']);

// Aşağıdaki get_field_id('title') fonksiyon kullanımı
// widget-rss_links-__i__-title şeklinde form ID'si oluşturur

// Aşağıdaki get_field_name('title') fonksiyon kullanımı
// widget-rss_links[__i__][title] şeklinde form ismi oluşturur

// attribute_escape($entry_title) kodu değişkeni zararlı kodlardan temizler
?>


Bileşenimiz artık bileşenler sayfasında resimdeki gibi görülüyor. Yan menünüze sürükleyip, bırakarak ekleyebilirsiniz. İlk fonksiyonumuz bu kısmı oluşturuyor.


Bileşenimizi yan menüye eklediğinizde, bileşenler bölümünde resimdeki gibi görünecek. Tabi ki ilk seferinde boş olarak gelecek. Doldurup, Save düğmesine tıklandığında AJAX kullanılarak kayıt işlemi yaptırılacak. Kodlar içerisindeki form fonksiyonu bu görüntüyü oluşturuyor.


Bileşenimizi yan menüye ekleyip, gerekli ayarları yaptığınızda sitemizin yan menüsünde resimdeki gibi görülecektir.

WP 2.8 ile birlikte bileşen yazmak gerçekten çok kolaylaşmış durumda. wp-includes/default-widgets.php dosyası içerisindeki bileşen tanımlamalarını inceleyerek, daha karmaşık bileşenler yazabilirsiniz. Sanırım yazdığım bileşenleri güncellemem gerekecek. Daha önce bileşenleri böyle yazıyorduk.

Kaynak


Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=850.

Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.


“WordPress 2.8 İçin Bileşen Yazıyoruz” yazısı için 3 Yorum

Bu yazıya yapılan yorumları dilerseniz, ( RSS 2.0 ) beslemesini kullanarak takibe alabilirsiniz.

  1. Eklentilere Çoklu Dil Desteği Ekleme - 1 - Yakup Gövler - WordPress'e dair ne varsa - Bileşen Eklenti Eklentiler WordPress WordPress 2.8 dedi ki:

    [...] belirlediği bir resmi, alt yazısıyla beraber gösteren bir bileşen olsun. Daha önceden WordPress 2.8 için bileşen nasıl yazılır anlatmıştım. Aşağıdaki bileşen kodlarını anlayabilmeniz için lütfen o yazımı [...]

  2. onurtan dedi ki:

    Yakup bey merhaba,

    WP de yazı ekleme bölümünde yükle/ekle bölümündeki media ekleme bölümüne bir menü daha ekleyip bu menüden mesaj bölümüne otomatik içerik ekleyecek bir script yapmak istiyorum. Mesela tab kodlarını otomatik koyacak ve radio buton ile seçenekler yapmak istiyorum. Yol gösterebilirmisiniz. Açıklayıcı olmadıysa resim gönderebilirim. Tşkler.

  3. Yakup Gövler dedi ki:

    @onurtan, nextgen gallery eklentisinin bu tarz bir özelliği bulunmakta, o eklentinin kodlarını inceleyerek, bu işi nasıl yapacağınızı bulabilirsiniz. PHP, WordPress yapısı ve eklenti yazmayla ilgili bilginiz olduğunu varsayıyorum.