Bazen bir durumu anlatmak için kullanmanız gereken kelime sayısı fazla olmak zorunda olur ya; şu anda ben de aynı durumla karşı karşıyayım. Yazı başlığının, yazıda anlatacağım şeyi tam olarak ifade edip etmediği hakkında kesin bir şey söylemem mümkün değil. Çünkü buna ben de emin değilim. Ve bu durumu tam olarak anlatmak için birkaç cümle kurmak gerekecek ki hemen bu birkaç cümleyi kurayım. WordPress tabanlı sitenizin anasayfasında 6, kategori sayfalarında 8, etiket sayfalarında 10, arama sonuçlarında 12, arşiv sayfalarında da 20 sonuç göstermek istediğinizde bunu nasıl yapacağınız işte tam da bu yazımızın konusu.
Sadece WordPress için değil her soru/sorun için geçerli olan birden fazla cevabın, çözüm yolunun bu durum için de geçerli olduğunu sanırım tahmin etmişsinizdir.
Her bir bölüm için farklı sayıda yazı gösterme işlemini; WordPress’in bize sunduğu esnek kodlama yapısından ve zengin fonksiyon kütüphanesinden yararlanarak da yapabiliriz, bir eklenti yardımı ile de yapabiliriz.
İlk olarak hazır WordPress fonksiyonlarından yararlanarak bu işin nasıl yapılacağını görelim:
Öncelikle kısa bir bilgi tazeleme babında ufak bir liste yapalım ki hangi bölüm temanın hangi dosyası aracılığı ile görüntüleniyor, hatırlamış olalım:
- Anasayfa = index.php (Bazı temalarda home.php) - Kategoriler = archive.php - Arşivler = archive.php - Etiketler = tag.php (Mevcut değilse archive.php) - Arama Sonuçları = search.php - Yazar Sayfaları = author.php
Daha ayrıntılı bilgi için WordPress Tema Hiyerarşisini inceleyebilirsiniz.
Bu kısa ekstra bilgiden sonra dönelim asıl meseleye. Daha anlaşılır olması için iki farklı dosya üzerinde bu işlemin nasıl yapılacağını anlatmak istiyorum.
İlk önce anasayfada göstereceğimiz yazı sayısını ayarlayalım. Temamızın index.php dosyasını açıyor ve döngü (loop) öncesine bir sorgu parametresi ekliyoruz. Kodumuz aşağıdaki gibi oluyor.
query_posts('posts_per_page=5'); if ( have_posts() ) : while ( have_posts() ) : the_post();
Buradaki 5 değeri sayfa başı gösterilecek yazı sayısıdır ve istediğiniz rakamla değiştirebilirsiniz. Bu kadar mı? Tabi ki bu iş bu kadar kolay değil. Yukarıdaki kodu test ettiğinizde anasayfada 5 adet yazının görüntülendiğine şahit olacaksınız fakat önceki sayfalara geçmek istediğinizde yine anasayfanın görüntülendiğini fark edeceksiniz. Bu durumun önüne geçmek için sorgumuzu biraz daha zenginleştirmemiz gerekecek. Böylece önceki sayfalarda yer alan kayıtlar listeleniyorsa sorgumuza ona göre sayfa numarası göndermesini sağlayacağız. Bu parametreleri de ekledikten sonra kodumuz aşağıdaki gibi olacaktır.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('posts_per_page=5&paged='.$paged); if ( have_posts() ) : while ( have_posts() ) : the_post();
Şimdi önceki sayfalara geçmek istediğinizde eski kayıtlara ulaşabildiğinizi göreceksiniz.
Anasayfa için yapmamız gereken işlem bu kadar. Fakat kategori, etiket, arama veya yazar sayfaları için aynı kodları denediğinizde bir şeylerin eksik olduğuna şahit olacaksınız. Bu eksik olan şey ise sınıflandırma parametresidir ki sorgumuza o parametreyi göndermediğimizde herhangi bir ayrım yapmadan tüm yazılar görüntülenir ve sayfamızın anasayfadan bir farkı kalmaz. O nedenle eğer sorgu filtrelemeyi kategori sayfaları için yapacaksak hangi kategori olduğunu, etiket sayfaları için yapacaksak hangi etiket olduğunu vs. sorgumuza dahil etmemiz gerekiyor. Aşağıdaki kodda kategori sayfaları için gerekli olan kod mevcut. Yine 5 değerini istediğiniz rakamla değiştirebilirsiniz.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('cat=' . $cat . '&posts_per_page=5&paged='.$paged); if ( have_posts() ) : while ( have_posts() ) : the_post();
Sorguyu siz etiketler, yazarlar, arama ve arşiv sayfaları için çeşitlendirebilirsiniz.
Daha önceki yazılarımda kod tembeli site sahipleri için yaptığım güzelliği bu yazıda da devam ettiriyor ve “Ben bu kadar kodla uğraşamam arkadaş. Armudun pişip ağzıma düşmesini istiyorum.” diyenler için yukarıda yaptığımız onca şeyi ve daha fazlasını yapan bir eklentiyi yazının sonuna ekliyorum. Scott Reilly tarafından yazılan Custom Post Limits isimli eklentinin dil dosyasını Türkçeleştirdim fakat dil dosyasındaki bazı eksikliklerden dolayı eklenti ayarlarının yapıldığı sayfada birkaç bölüm İngilizce. O kadarına da umarım bir şey demezsiniz.
Eklentinin Türkçeleştirilmiş halini aşağıdaki bağlantıdan indirebilir, önizleme resmine de yine aşağıdan ulaşabilirsiniz.
Custom Post Limits Türkçe (93,8 KiB)