26 Ekim 2008

WordPress Özel Alan Fonksiyonları

WordPress Yorum Ekle

Yazılara eklenebilen özel alanlar vasıtasıyla, yazılarınıza birçok özellik katabilirsiniz. En basitinden her yazı için bir resim belirleyebilir ve bu resmi yazının önizlemesi olarak temanızda gösterebilirsiniz. Özel alanların kullanımı ve uygulamalar için daha önce de bildirdiğim gibi renkliteneke'nin yazısı güzel bir başlangıç olabilir.
Özel alanlarla ilgili yazılarımda, özel alanları efektif kullanmamızı sağlayarak fonksiyonları tanıtacağım. Tabi ince özel alanlar hakkında kısa bir bilgi.
Özel alanları eklemek çok kolay, bunun için yapmanız gereken Yazı Yazarken pencerenin altında bulunan, Özel Alanlar sekmesini açtıktan sonra özel alanı tanımlamak için bir anahtar (keyword) ve özel alanın değerini yazmanız yeterlidir. Başka bir yazıyı yazarken ise tekrar anahtar kelimeyi yazmak yerine açılır kutudan anahtar kelimeyi seçmeniz ve değerini yazmak yeterli olacaktır. Bir yazı aynı anahtardan birden fazla değer alabilir. Bu nedenle özel alan fonksiyonlarının çoğunda geri dönen değer dizi şeklindedir.
Özel alanlara girilen anahtarlar ve değerler veritabanında 'postmeta' isimli tabloda, aşağıdaki alan adlarıyla tutulurlar.
meta_id: Her bir kayıt için tekil id
post_id: Özel alanın ait olduğu yazının ID'si
meta_key: Özel alanın ismi (keyword)
meta_value: Özel alanın değeri.

Yazının Özel Alanlarını Listelemek

Bir yazıya ait özel alanların tamamını göstermek için 'the_meta' fonksiyonu kullanılır. Bu fonksiyon daha çok yazı sonunda post-meta olarak adlandırılan alanda kullanılır. Fonksiyon Loop (döngü) içerisinde kullanılmalıdır. Döngü içerisinde yazının özel alanlarını göstermek istediğiniz yere aşağıdaki kodu yazmanız yeterlidir.
<?php the_meta(); ?>
Fonksiyon aşağıdakine benzer bir çıktı verecektir.

  1. <ul class='post-meta'>
  2.  <li><span class='post-meta-key'>Anahtar Adı1:</span> Anahtar Değeri 1</li>
  3.  <li><span class='post-meta-key'>Anahtar Adı2:</span> Anahtar Değeri 2</li>
  4. </ul>

Bu çıktıyı CSS ile istediğiniz formatta biçimlendirebilirsiniz. O kısmı artık size kalmış.

Özel Alanlar İçin Gelişmiş Teknikler

Aşağıda, özel alanları almak ve özelleştirmek için gelişmiş tekniklerden örnekler yer almaktadır.

Özel Alanları Almak

Yazıya ait özel alanları almak için get_post_meta() fonksiyonu kullanılır:
get_post_meta($post_id, $key, $single)
Parametreler
$post_id: Özel alanlarını almak istediğiniz yazının ID'si. Yazının ID'si için $post->ID'yi kullanabilirsiniz.
$key: Yazının almak istediğiniz özel alanının adı.
$single: true ya da false değeri alır. Eğer true girilirse, özel alan değeri tek satırlık metin olarak döner, değer ilgili anahtarın ilk değeridir. false girilirse dönen değer dizi olur. Varsayılan false.
Örnek:
Tek bir değeri almak için,
$onizlemeresmi = get_post_meta($post->ID, "onizleme", true);
echo $onizlemeresmi;
Birden fazla değeri almak için,
$onizlemeresimleri = get_post_meta($post->ID, "onizleme", true);
foreach ($onizlemeresimleri as $onizlemeresmi) {
  echo $onizlemeresmi;
}

Ön Belleği Kullanma

Bir yazı görüntülendiğinde yazıya ait bütün özel alanlar önbelleklenir. Yazıya ait önbellek bilgileri $post_meta_cache isimli bir dizi değişkende tutulur. Örneğin 256 ID'li yazının 'neokuyorum' adlı anahtarının değerlerini almak için:
$neokuyorumlistesi = $post_meta_cache[256]['neokuyorum'];
kodu kullanılır. Dönen değer dizi değeridir. Ancak bu değişken artık sık kullanılmıyor. Özel alanlarla işlem yapmak için aşağıdaki fonksiyonları kullanmak daha uygun olacaktır.

Dahili Özel Alan Fonksiyonları

Aşağıdaki fonksiyonlar Loop (yazı döngüsü) içerisinde kullanılmalıdır.

get_post_custom()

Yazının bütün özel alan anahtarlarını ve değerlerini döndürür. Genel kullanımı:

  1. <?php
  2.  
  3.   $custom_fields = get_post_custom();
  4.   $my_custom_field = $custom_fields&#91;'ozelalanlarim'];
  5.  foreach ( $my_custom_field as $key => $value )
  6.     echo $key . " => " . $value . "<br />";
  7.  
  8. ?>

Ekran Çıktısı:
0 => Köpekler
1 => 86
2 => Başka bir değer
İstenirse parametre olarak yazı ID'si de girilebilir.

get_post_custom_keys()

Yazıya ait özel alan anahtarlarını dizi olarak döndürür. Genel kullanımı:

  1. <?php
  2.  
  3.   $custom_field_keys = get_post_custom_keys();
  4.   foreach ( $custom_field_keys as $key => $value )
  5.     echo $key . " => " . $value . "<br />";
  6.  
  7. ?>

Ekran Çıktısı:
0 => onizleme
1 => ozelalanadi1
2 => ozelalanadi2
İstenirse parametre olarak yazı ID'si de girilebilir.

get_post_custom_values($key)

Yazıya ait belli bir özel alan adının değerini döndürür. Özellikle birden fazla değeri olan anahtar adlarının değerlerini almak için kullanılması önerilir. Anahtarın tek değeri varsa get_post_meta() fonksiyonunu kullanmanız uygun olacaktır.

  1. <?php
  2.  
  3.   $mykey_values = get_post_custom_values('anahtaradi');
  4.   foreach ( $mykey_values as $key => $value ) {
  5.     echo "$key  => $value <br />";
  6.   }
  7.  
  8. ?>

Ekran Çıktısı:
0 => Birinci değer
1 => İkinci değer
2 => Üçüncü değer
Fonksiyona istenirse yazı ID'si de parametre olarak verilebilir. Yani get_post_custom_values('anahtaradi', 25); şeklinde de kullanılabilir.

Bu fonksiyonların dışında özel alanların eklentiler içerisinde yönetilmelerini sağlayacak bazı fonksiyonlar da vardır. Bunlar:
add_post_meta, delete_post_meta, update_post_meta

Kaynak: WordPress.org Codex - Using Custom Fields,


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

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 Özel Alan Fonksiyonları” yazısı için 13 Yorum

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

  1. sohbetetsem dedi ki:

    paylaşımlarınız icin teşekkürler

  2. WordPress’te Özel Yazım Paneli Yaratmak · Yakup Gövler'in Not Defteri dedi ki:

    [...] 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 [...]

  3. ozez dedi ki:

    merhaba;
    http://www.elegantthemes.com/preview/eGallery/ adresindeki wordpress temasını fotograf derneğimiz için satın aldık.Temayı kurdum fakat fotograf yüklemeyi çözemedim :S
    bu temaya linkten bakarsanız, ve bu anlatığınız konu ile ilgili birşeymi veya temanın içinde phpThumb klasörü var bunlar ilgili olabilirmi!

  4. Yakup Gövler dedi ki:

    Bahsettiğiniz tema elimde olmadığından yardımcı olamayacağım. Satın aldığınız yerden destek isteyin, sonuçta para verip aldığınız yerden yardım da isteyebilmeniz gerekmektedir.
    Muhtemelen yazı yaz bölümünün alt kısmında resim ekleme bölümü vs. vardır ya da bir yerlerde bunun için eklenti bulunuyordur, onu araştırın.

  5. CooLXviD dedi ki:

    Her yazıma bir resim ekliyorum..Yeni temam bu özel alanlar üzerine tasarlanmış...Fakat eski temamda hiç bu özelliği kullanmadım...

    Acaba geçmiş yazılarımdaki ilk resimleri özel alanlara taşıyabilmem mümkünmü?...Bu şekilde yeni temamı sorunsuz kullanmış olurum..

  6. CooLXviD dedi ki:

    Hocam İnşallah boş vaktinize bu eklentiyi yazarsınız...Yada yazabilecek konuyla ilgili tüm arkadaşlardan ricamızdır..

  7. Yakup Gövler dedi ki:

    Bunun için küçük bir eklenti yazılması gerekiyor. Eklentide bu yazıdaki ve aşağıdaki adreslerdeki yazılarda bahsedilen fonksiyonlar kullanılmalıdır.
    http://www.yakupgovler.com/?p=763
    http://www.yakupgovler.com/?p=393
    Şu an vaktim olmadığından yardımcı olamayacağım. Yapılması gereken,
    * İlgili özel alana sahip olmayan yazılar belirlenir.
    * Bu yazıların içerisindeki ilk resim elde edilir.
    * Bu resim özel alan olarak ilgili yazıya eklenir.

  8. Erhan dedi ki:

    Hocam, benim bir sorum olacak, kaç gündür uğraşmama rağmen bir cözüm bulmuş değilim, özel alan bölümüne resim göstermek yerine konuyla alakalı yazı girmek gibi bir şey söz konusu olabilirmi? Teşekkürler…

  9. Muhammed dedi ki:

    Öncelikle bu faydalı konu için tşk ler.

    merak ettiğim bir husus var. WordPress temalarda genelde konuların resimleri özel alandan ekleniyor. ( özellikle premium temalarda ) Biz örnegin tema değişikligi yaptıgımızda, yeni temanın özel alan çağrışımı farklı oldugundan bütün eski özel alan yazılarını yenisi ile phpmyadminden değiştirme imkanımız var mı?

    Nasıl olacak eger oluyorsa ya da baska bi yöntem.

    Tşk ler.

  10. gncwebmaster dedi ki:

    Hocam yazı gayet güzel. Kaçırmış olabilirim eğer öyleyse k.bakmayın. Ancak benim bir sorum olacak. Şimdi ben thumbnail değeri ile resimleri çekiyorum tek bir şekilde. O resimlere başka bir özel alan yardımıyla link verebilir miyim? Yani anahtar thumbnail değer resim url, 2. anahtar th_url değer resimin tıklanınca gidilecek adresi. Kodum şu:

    <a href="" title=""><img src="ID, $key, true); ?>" alt="" />

  11. Schumacher dedi ki:

    http://img182.imageshack.us/img182/8517/hgchg.jpg

    Hocam özel alanlara eklediğim resimlere açıklama ekleyemiyorum.Post-pic olarak görünüyor.. Nasıl açıklama yada konun başlığını ekleyebilirim?...(WP 2.6.5 convergence temasını kullanmatayım)

  12. emre dedi ki:

    selam
    yanlış hatırlamıyorsam site icinde aramalarda aranan kelimeyi renklendirme diye bir yazınız vardı sanırım ona ulaşamadım veya ona benzer yazınız varmı?

  13. Yakup Gövler dedi ki:

    @emre, öyle bir yazım olduğunu hatırlamıyorum. Google'da aratırsanız bulabilirsiniz. Hatta bununla ilgili wordpress eklenti dizininde eklentiler de olabilir, seach highligter şeklinde aratırsanız bir şeyler bulabilirsiniz.