05 Ağustos 2009

Önceki - Sonraki Yazıların Bilgilerini Almak

WordPress Yorum Ekle

WordPress'te artık neredeyse birçok kişinin tekil yazıları gösterirken, kullanmadığı özelliklerden birisi de önceki ve sonraki yazı bağlantıları olsa gerek. Ama bunu farklı şekilde kullanmak isteyebilirsiniz, örneğin WpUzmanı'nın tekil sayfalarda, üst kısımda, önceki ve sonraki yazıların resimleri, tarihleri ve bazı bilgilerini gösterdiği gibi. Aslında bunu r10.net ve wordpress-tr.com forumlarında da isteyen olmuştu.
Burada anlatılanları uygulayabilmek için kod bilginiz gerektiğini söylemem gerekiyor. Kodları kendi temanıza uydurmak size kalmış.
Önceki ve sonraki yazılarla ilgili WordPress bize ultra, mega güzellikte iki fonksiyon sunuyor. Önceki yazılar için get_previous_post() fonksiyonu, sonraki yazılar için ise get_next_post() fonksiyonu. Bunların yaptıkları iş, ilgili yazının wp_posts tablosu içerisindeki bilgilerini getirmek. Bize kalan ise bu bilgileri uygun şekilde işlemek ki buradaki en önemli bilgi, ilgili yazıların ID'leri olsa gerek. Şimdi örneklerle olayı anlatalım.

Örnek 1 - Önceki ve sonraki yazı bilgilerini alıp, yazdıralım

Aşağıdaki örnek, önceki ve sonraki yazıların bilgilerinden; ID, başlık, tarih, yazı URL bilgilerini yazdırır. Kodların döngü içerisinde olması gerektiğini hatta single.php dosyası içerisinde, döngünün içerisinde olması gerektiğini unutmayın. Kodların açıklamaları yorum olarak eklidir.

  1. <?php
  2. //Önceki yazılarla ilgili bilgiler
  3. $onceki = get_previous_post();
  4. //Önceki yazının bilgilerini çektik
  5. echo $onceki->ID;
  6. //Yazının ID'sini yazdırdık
  7. echo $onceki->post_title;
  8. //Yazının başlığını yazdırdık
  9. echo mysql2date(get_option('date_format'), $onceki->post_date);
  10. //Yazının tarihini ayarlardaki haliyle yazdırdık
  11. echo get_permalink($onceki->ID);
  12. //Yazının adresini yazdırdık
  13.  ?>
  14.  
  15. <?php
  16. //Sonraki yazılarla ilgili bilgiler
  17. $sonraki = get_next_post();
  18. //Sonraki yazının bilgilerini çektik
  19. echo $sonraki->ID;
  20. //Yazının ID'sini yazdırdık
  21. echo $sonraki->post_title;
  22. //Yazının başlığını yazdırdık
  23. echo mysql2date(get_option('date_format'), $sonraki->post_date);
  24. //Yazının tarihini ayarlardaki haliyle yazdırdık
  25. echo get_permalink($sonraki->ID);
  26. //Yazının adresini yazdırdık
  27.  ?>

Örnek 2 - Aynı kategoriden önceki ve sonraki yazılar

Aşağıdaki örnek, açık olan tekil yazıyla aynı kategorideki önceki ve sonraki yazıların bilgilerini gösterir. Yukarıdakinin aynısı olup, tek fark fonksiyonlara true parametresi girmemiz. Bu nedenle sadece fonksiyonların çağırılma kısmını yazıyorum.

  1. <?php
  2. $onceki = get_previous_post(true);
  3. $sonraki = get_next_post(true);
  4. ?>

Örnek 3 - Önceki ve sonraki yazıların özel alan bilgilerindeki resmi gösterme

Böyle bir işlem için bize önceki ve sonraki yazının ID'sini elde etmek yeterli, geri kalanı temalarımızda küçük resimleri gösterirken kullandığımız kodlar halledecek. Örnekte, yazılara "thumbnail" adıyla eklenen resim adresinin bulunduğu özel alandaki değeri alıp, img html etiketi ile göstereceğiz. Altına da tarihi yazdıracağız.

  1. $onceki = get_previous_post();
  2. $resim_adresi = get_post_meta($onceki->ID, 'thumbnail', true);
  3. //Yazının thumbnail özel alan değerini alıyoruz
  4. echo "<img src='$resim_adresi' />";
  5. //Resmi siteye basıyoruz
  6. echo '<a href="'.get_permalink($onceki->ID) . '" title="'.$onceki->post_title.'"><img src="'.$resim_adresi.'" /></a>"';
  7. //Resmi siteye yazının bağlantısını vererek basıyoruz
  8. echo mysql2date(get_option('date_format'), $onceki->post_date);
  9.  
  10. //Sonraki yazılar için de get_next_post fonksiyonunu aynı yöntemle kullanıyoruz.

Benden bu kadar fonksiyonları ve örnekleri inceleyerek gönlünüz ne istiyorsa onu, kodlama bilginizle yapmaya çalışın. Alın da hayrını görün.
Uyarı: Fonksiyonlar her çağırıldıklarında bir SQL sorgusu yapıyorlar. Aynı kategorideki yazılar çekilmek istendiğinde ise sorgu sayısı artıyor, yazıya ait özel alan elde edilmek istenirse sorgu sayısı daha da artıyor. Bu nedenle performans arayanlar, fonksiyonların kodlarını inceleyip, kendi işlerini yapacak fonksiyonlarını kendileri yazmalılar, ya da sorgu sayısının artmasına razı olmalılar. Uyarmadı demeyin.


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

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


“Önceki – Sonraki Yazıların Bilgilerini Almak” yazısı için 5 Yorum

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

  1. gevv dedi ki:

    Teşekkürler hocam. Öyle güzel ip uçları çıkıyor ki optimize takılalım 🙂 fazla sorgu olmasın sunucu yorulmasın derken insan kendini tutamıyor 😀 denemek istiyor

  2. Yakup Gövler dedi ki:

    Uyarı yapmayı unutmuştum, yazarken aklımdaydı, sonuna gelince unutmuşum.
    Fonksiyonlar, her çağırıldıklarında bir SQL sorgusu çalıştırıyorlar. Yazılar aynı kategoriden alınacaksa, bu daha da artabiliyor. Üstüne yazının özel alan bilgilerini alacaksanız da daha fazla sorgu yapılmaya başlanıyor. Bunları göze alanlar yöntemi kullansın. Ya da bu fonksiyonların kodlarını inceleyerek kendi işlerini yapan fonksiyonlarını kendileri yazsınlar.
    Bu uyarıyı da yazıya ekleyeyim bari.

  3. Semih Aksu dedi ki:

    Hocam elinize sağlık 🙂

  4. Yakup Gövler dedi ki:

    Yazıya ait kategorileri kat1 > kat2 şeklinde göstermek için
    echo get_the_category_list( ' > ', '', $onceki->ID);
    kodunu kullanabilirsiniz.

    Yok ben yazıya ait kategorilerin listesini elde etmek istiyorum derseniz de

    1. <?php
    2.  $categories = get_the_category( $onceki->ID );
    3.  $liste = "<ul>";
    4.  foreach ($categories as $category) {
    5.  $liste .= '<li><a href="' . get_category_link( $category- rel="nofollow">term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . $rel . '>' . $category->cat_name.'</a></li>';  
    6.  }
    7.  $liste.="</ul>";
    8.  echo $liste;
    9. ?>
  5. Yakup Gövler dedi ki:

    Kodun sonundaki $liste=" ifadesi $liste.=" olacak. Kodu düzelttim, yeni kodu deneyin. Başka hata varsa da tırnaklardan vs. kaynaklanıyordur. Ayrıca kodların başına önceki yazının ID'sini alacak kodları da eklemelisiniz.