29 Ekim 2008

WordPress'te Özel Yazım Paneli Yaratmak

WordPress Yorum Ekle

WordPress'in yazma ekranında biliyorsunuz ki çeşitli paneller var. Bu paneller vasıtasıyla yazıya ait çeşitli ayarları yapabiliyor, özel alan paneli gibi panellerle de yazıya ait özel bilgiler ekleyebiliyoruz. Yazacağınız eklentilerde siz de bunlara benzer panel eklemeyi düşünüyorsanız, o zaman bu yazım tam size göre.
Konuyla ilgili WordPress.org'da bir açıklama var. Ancak bu açıklama pek yeterli değil, yazıdan temel konular ve add_meta_box() fonksiyonu ile ilgili parametreler hakkında bilgi edinilebilir.
Panel ekleme işlemini, yazacağımız bir eklenti üzerinden anlatmak en doğrusu olacaktır. Eklentimizin yapacağı işlem şu, yazı yazma ekranına bir panel ekleyecek, panelde yazılar için Kaynakça ve Önizleme resmi eklenebilecek iki metin alanı bulunacak. Buraya girilecek bilgiler yazıya özel alan olarak (_kaynakca, _onizleme - Özel alanların gizlenebilmesi için ismin başına _ (alt çizgi) eklenmiştir.) kaydedilecek. Kaydedilen özel alanların kullanımı, özel alanlarla ilgili işlemlerde kullanacağımız fonksiyonlar için buraya ve buraya bakın lütfen, çünkü bu kısım yazacağımız eklentinin dışında olacak ve bu kısmı kendiniz halletmelisiniz.
Aşağıdaki resimde eklentimizin nasıl bir panel ekleyeceğini görebilirsiniz.

Haydi Başlayalım

Eklentimiz için 'wp-content/plugins' klasörü içerisinde 'panel_ekle.php' isminde bir dosya oluşturun. Dosyayı Notepad++ gibi bir editör'le açın, dosyanın kodlama dilini UTF-8 (BOM olmadan) olacak şekilde ayarlayın (Notepad++ için Düzenle menüsünden). Bu dosya bizim eklentimizin dosyası olacak. Artık bölüm bölüm eklentimizin kodlarını yazalım. Her bölüm altında kodun yaptığı iş açıklama olarak yer almaktadır. Ayrıca her kod satırının altında gerekirse açıklama yer almaktadır. Unutmadan yazacağımız eklenti WP 2.5 ve üzerinde çalışacaktır, çünkü eklentimizde kullandığımız add_meta_box fonksiyonu bu sürümden itibaren eklenmiştir.

  1. <?php
  2. /*
  3. Plugin Name: Özel Yazı Paneli
  4. Plugin URI: http://www.yakupgovler.com
  5. Description: WordPress yazı ekranına kendi özel alan kutunuzu ekler.
  6. Version: 1.0
  7. Author: Yakup Gövler
  8. Author URI: http://www.yakupgovler.com
  9. */
  10. &#91;/php]
  11. Bu bölüm, WordPress'e eklenti hakkında bilgi vermektedir. Sırasıyla, eklentinin adı, adresi, açıklama, versiyonu, yazarı ve yazarın websitesi bilgileri yer almaktadır.
  12. [php]
  13. function paneli_ekle() {
  14. global $post;
  15.  
  16. $kaynakca = get_post_meta($post->ID, 'kaynakca', true);
  17. $onizleme = get_post_meta($post->ID, 'onizleme', true);
  18. // Mevcut değerleri alıyoruz.
  19. if($kaynakca == "") $kaynakca = "Varsayılan bir kaynak&ccedil;a";
  20. if($onizleme == "") $onizleme = "http://www.siteadi.com/wp-content/images/varsayilan.jpg";
  21. //Eğer yoksa, varsayılan değer atıyoruz. İsterseniz olmayabilir.
  22. echo'<input type="hidden" name="panelimiz_noncename" id="panelimiz_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
  23. //Güvenlik için eşsiz bir değer üretiyoruz.
  24. //Aşağıda ise gerekli form elemanları uygun şekilde oluşturuluyor.
  25. echo'<h2>Kaynak&ccedil;a</h2>';
  26. //Ne yazık ki Türkçe harfler kullanamıyoruz.
  27. //Türkçe harflerin HTML karşılıklarını kullanıyoruz.
  28. echo'<input type="text" name="kaynakca" value="'.$kaynakca.'" size="55" /><br />';
  29. echo'<p><label for="kaynakca">Varsa yaz&#305;nızın kaynağınızın adresini yazınız.</label></p>';
  30.  
  31.  echo'<h2>&Ouml;nizleme</h2>';
  32.  echo'<input type="text" name="onizleme" value="'.$onizleme.'" size="55" /><br />';
  33.  echo'<p><label for="onizleme">Yazılarınız i&ccedil;in bir &ouml;nizleme resminin adresini, sitenize y&uuml;kledikten sonra ekleyin.</label></p>';
  34. }

Bu bölümde panelimizi görsel olarak oluşturacak kodlar yer almaktadır. Buradaki form elemanlarını istediğiniz gibi yaratabilirsiniz. Dikkat etmeniz gereken oluşturacağınız her panel için, form elemanlarına farklı isimler vermeniz gerektiğidir. Ne yazık ki formda kullanacağınız açıklayıcı cümleler ve varsayılan değerler için Türkçe karakterler (ç, ı, ö, ş,ü vs.) kullanamıyoruz, sanırım bir filtreleme yapılıyor. Kaydedilen değerler için bu durum geçerli değil. Bu nedenle Türkçe karakterlerin yerine onların HTML kod karşılıklarını yazmamız gerekiyor. Bunun da en kolay yolu (ben öyle yaptım) Dreamweaver'da dil kodlamasını Türkçe yapmadan, yazıyı yazmak ve sayfanın HTML kodlarından yazının kodlanmış halini kopyala/yapıştır yapmak.

  1. function paneli_yarat() {
  2.  if ( function_exists('add_meta_box') ) {
  3.   add_meta_box( 'panelimiz', 'Kaynak&ccedil;a ve &Ouml;nizleme', 'paneli_ekle', 'post', 'normal', 'high' );
  4.   add_meta_box( 'panelimiz', 'Kaynak&ccedil;a ve &Ouml;nizleme', 'paneli_ekle', 'page', 'normal', 'high' );
  5.  }
  6. }
  7.  
  8. add_action('admin_menu', 'paneli_yarat');

add_action fonksiyonu ile yönetim menüsü oluşturulurken 'paneli_yarat' fonksiyonunu çağırıyoruz. 'paneli_yarat' fonksiyonunda ise add_meta_box() fonksiyonu ile WP'ye "Kaynakça ve Önizleme" başlıklı bir paneli hem 'Yazı' hem de 'Sayfa' yazma ekranında oluşturacağımızı, bu panel içeriğinin ise 'panel_ekle' fonksiyonu ile oluşturulacağını söylüyoruz.

  1. function verileri_kaydet( $post_id ) {
  2. global $post;
  3.  
  4. //Güvenlik kontrolü
  5. if ( !wp_verify_nonce( $_POST['panelimiz_noncename'], plugin_basename(__FILE__) )) {
  6.  return $post_id;
  7. }
  8.  
  9. if ( 'page' == $_POST['post_type'] ) {
  10.  if ( !current_user_can( 'edit_page', $post_id ))
  11.   return $post_id;
  12.  } else {
  13.   if ( !current_user_can( 'edit_post', $post_id ))
  14.   return $post_id;
  15. }
  16. //Kullanıcının yetkisi var mı?
  17.  
  18. $kaynakca = $_POST['kaynakca'];
  19. $onizleme = $_POST['onizleme'];
  20. //Panele girilen bilgileri alıyoruz
  21.  
  22. if(get_post_meta($post_id, 'kaynakca') == "")
  23.  add_post_meta($post_id, 'kaynakca', $kaynakca, true);
  24. elseif($kaynakca != get_post_meta($post_id, 'kaynakca', true))
  25.  update_post_meta($post_id, 'kaynakca', $kaynakca);
  26. elseif($kaynakca == "")
  27.  delete_post_meta($post_id, 'kaynakca', get_post_meta($post_id, 'kaynakca', true));
  28.  
  29. if(get_post_meta($post_id, 'onizleme') == "")
  30.  add_post_meta($post_id, 'onizleme', $onizleme, true);
  31. elseif($onizleme != get_post_meta($post_id, 'onizleme', true))
  32.  update_post_meta($post_id, 'onizleme', $onizleme);
  33. elseif($onizleme == "")
  34.  delete_post_meta($post_id, 'onizleme', get_post_meta($post_id, 'onizleme', true));
  35. //Verilerin daha önceden olup olmadığı kontrol ediliyor
  36. //ve gerekli işlemler yapılıyor.
  37. }
  38.  
  39. add_action('save_post', 'verileri_kaydet');
  40. ?>

Yazı/Sayfa kaydedildiğinde 'verileri_kaydet' fonksiyonunun da çağırılmasını istiyoruz. Bu fonksiyon içerisinde ise panele girilen bilgiler kontrol edilip, özel alan olarak ekliyoruz. Siz isterseniz bilgileri SQL sorguları ile veritabanına ayrı olarak kaydedebilir ya da canınız ne istiyorsa onu yapabilirsiniz.

Sonuç

Gördüğünüz basit birkaç fonksiyon ve kod ile kolaylıkla bir panel ekleyebiliyor ve panelden gelen verileri kaydedebiliyoruz. Eklenti ile yaptığımız işlemler basit ama siz isterseniz daha da kompleks hale getirebilirsiniz.
Kodlar içerisinde geçen WordPress fonksiyonlarıyla ilgili bilgilere;
add_action, get_post_meta, add_post_meta, update_post_meta, delete_post_meta bağlantılarını inceleyebilirsiniz.
Kodların tamamını aşağıdan indirebilirsiniz.
Panel Ekleme Eklentisi
Kaynakça: wefunction.com, WordPress Codex


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

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’te Özel Yazım Paneli Yaratmak” yazısı için 1 Yorum

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

  1. Web’den Seçtiklerim #3 | Müjdat Korkmaz dedi ki:

    [...] WordPress’te Özel Yazım Paneli Yaratmak [Bağlantı] [...]