WordPress ile iki Farklı yazı alanı kullanmak
Evet arkadaşlar uzun süredir yazamıyorum (5 gün). Bugün şöyle güzel bir WordPress ipucuyla başlıyalım, nasıl olsa sabaha kadar oturuyorum. Birkaç yazı daha çıkar. Bu yazı içerisinde WordPress blogunuz içinde (dikkat kendi sunucunuzda/hostunuzda kurulu olan, worpdress.comdan alınanda zor olur belki) iki farklı yazı alanı göstermeyi yazacağım. Bunu şöyle tanımlayabilirim; Favori diye bir kategoriniz var ve bunu ayrı bir biçimde gösterebilme yetkisine sahip olacaksınız :) .
Bildiğiniz gibi WordPress içerisindeki content(yazıların gösterildiği alan) ve Loop olarak belirttiğimiz contenti içine alan bölüm çok önemli ve olmazsa olmaz bir alan. Biz burada birkaç değişiklik yapacağız ve iki adetcontent alanına sahip olacağız. Yani Loop alanını çoklayacağız.
[notice type=attention]Öncelikle WordPress kod düzenini tam olarak kavrayamamış yada WordPress kullanmaya yeni başlayan arkadaşlara bu önemli alana dokunmamalarını ve ellerinden gelebilecek diğer ipuçlarını kullanmalarını tavsiye ederim yada bir bilen kişiden yardım isteyebilirler.[/notice]
Geçelim kodlara ve tanımlamalara;
Neden böye birşeye ihtiyaç duyayım ki? sorusuna cevap:
Örnek olarak hergün sitenize video ekliyorsunuz ama bazen öyle videolar oluyor ki anasayfa içerisinde insanların gözlerinin içine kadar girmesi gerekiyor. Bunların ileride anasayfadan düşecekler. O zaman ne yapacaksınız?
Daha sorular gelirse açıklama yaparım :)
Bunu yapmanız için gerekli olan şey nedir? Nasıl yapmalısınız?
- Öncelikle varolan Loop ayarını değiştirmeye kalkarsak yazılarımızdan oluruz
- Eğer bu alanı çoklamaya kodu ikiletme alanı gibi yaparsak bu sefer de çifter yazılarla karşı karşıya kalırız.
- Bir iki farklı yöntem daha var ancak bu sefer de arşiv sayfasını kaybediyoruz.
- Bunun için kendi query kodumuzu oluşturmalıyız.
Aşağıdaki sırayla başlıyoruz. Sıra atlamadan takip ediniz. Bu değişiklikler index.php içine olacak ona göre :) ;
Standart Loop alanı kodlarıyla başlıyalım önce:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!-- alanlar ... -->
<?php endwhile; ?>
Buradaki asıl olay gördüğünüz gibi standart loop içerisindeki alanı çoklamamız. Bunun için $wp-query etiketini bir kere kullanabileceğimizdan bunu kolay yoldan klonlama ve tekrar kullanabilmek için rewind_posts() etiketini veya kendi oluşturduğumuz bir queryi kullanmalıyız.
query_posts() etiketini kullanarak Favoriler kategorisindeki yazıları gösterelim
Şimdi şu kullanacağımız kodu bir oluşturalım.
// Favoriler kategorisindeki son üç yazıyı çağıralım.
<?php query_posts('category_name=favoriler&showposts=3'); ?>
<?php while (have_posts()) : the_post(); ?>
<!-- Favoriler alanı biter... -->
<?php endwhile;?>
//L oop alanını sıfırlayalım
<?php rewind_posts(); ?>
//Diğer blog yazılarımız için normal alanı tekrar aktif hale getirelim
<?php while (have_posts()) : the_post(); ?>
<!-- Normal alan biter... -->
<?php endwhile; ?>
Buradaki yaptığımız kod bütünlüğü ile önce Favoriler kategorisindeki son eklenen üç yazıyı çektik ve görünmesini sağladık. Ardından normal alanı (standart WordPress yazı alanı) çağırarak sitenin anasayfasında göstermek için oluşturduk. Ama bunda bir sorun var. Sayfalama esnasında diğer sayfalara geçtiğinizde anasayfanın tamamı görünecek. Yani sitenin geri kalan yazılarına ulaşım maalesef imkansız olacak. Bunun nedeni ise şu; rewind_posts(); fonksiyonu. Neden mi? Çünkü rewind_posts(); tam olarak Loopu sıfırlıyor ama şöyle bir sorun yaratıyor. Her sayfada anasayfa yazıları görünüyor!
Bu kodu da kullanamadığımız fonksiyonlar arasına eklediğimize göre şöyle bir durum oluşacak. Kendimize ait bir query oluştuacağız. Böylece rewind_posts(); fonksiyonunu kullanmayacağımızdan sayfalama esnasında bir sorunumuz da olmayacak.
Şimdi kodumuzu oluşturmaya başlıyalım.
<?php $my_query = new WP_Query('category_name=favoriler&showposts=3'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<!-- Özel Kategoriledirmemizi yaptık... -->
<?php endwhile; ?>
Şimdi buradaki sorunuz neden my_query? olacakır. Çünki biz özel bir işlem yaptıracağız. Bunu have_posts veya the_posts olarak tanımalamız sırasında WordPress çiftleme yapacak ve istemediğimiz bir görüntüyü karşımıza getirecektir.
Bunu sitenizde loop alanından önce eklerseniz favoriler alanındaki yazılarınız blog yazılarınızdan önce çıkacaktır.
Son bir yöntem daha: Klonlama
Bu yöntem PHP5 serverler üzerinde çalışır. Demedi demeyin.
Yazı içinde size wp_query özelliğinin birkere çağırılabildiğini söylemiştim. Yukarlarda bir yerlerde yazıyor. Biz wp_query özelliğini klonlarsak nasıl olur? Güzel olur değil mi? İşte bu yöntem ile bu işlemi yapacağız.
// query kaydet
<?php $temp_query = clone $wp_query; ?>
<!-- yaptık mı yaptık... -->
//Favorileri gösterelim
<?php query_posts('category_name=favoriler&showposts=3'); ?>
<?php while (have_posts()) : the_post(); ?>
<!-- özel kategorimizi yaptık... -->
<?php endwhile; ?>
// query özelliğini yitirmesin birdaha kullanabilelim diye yerine geri koyalım
<?php $wp_query = clone $temp_query; ?>
Burada önce wp_query özelliğini birdaha kullanabilmek için kaydedip klonluyoruz. Kategorimizdekileri gösterip nazikçe yerine koyuyoruz.
Eğer isterseniz (kategori isminiz farklıysa ve sayıyı çoğaltmak istiyorsanız) category_name=favoriler alanındaki favoriler ismini değiştirerek kategorinizin ismini yazabilirsiniz (Büyük küçük harf, boşluk destekler) ve de showpost=3 alanındaki 3 rakamını azaltarak/çoğaltarak (4,5,6 vb) yazılarınızın adedini değiştirebilirsiniz (bu alan sadece rakamları destekler).
[notice type=notice]Makaleyi hazırlarken bunları css olarak kişiselleştirip nasıl kullanacağınızı da belirtecektim ancak buna vaktim olmadığından yazamıyorum ama bununla yapılmış bir örnek görmek isterseniz KaosKenti adlı bloga bakabilirsiniz. Canımız çıkıyordu düzenlerken :)[/notice]
Umarım anlaşılır olmuştur.
Bu yazı biterken biten şarkı : Teoman – İstanbul’da Sonbahar
Selametle
Allah razı olsun sizden :) Çok acil bir zamanımda yardımıma yetiştiniz..
:) Nasıl sevindim anlatamam. Elimden gelenin en iyisini ortaya koymaya çalışıyorum. Ne mutlu bana :)
saolllll adanmsın
iyi günler. Arayıp bulamadığım bir konu hakkında danışmak istiyorum. wordpress yazılar kısmını çoğaltmak istiyorum. Nasıl mı? örneğin; yazılar kısmının altına, aynı özellikte yazılar2 diye yeni bir sekme açmak istiyorum ve bunun üzerinde yapacağım değişiklikler yazıları etkilemeyecek şekilde olması lazım. bunun bir formülü veya eklentisi var mıdır? vereceğiniz cevap için şimdiden teşekkürler.
Tarık bey,
O dediğinizi özel yazı türleri (Custom Post Type) ile yapabilirsiniz. Daha önce yazmıştım. http://wpadami.com/cms-sistemleri/wordpress/wordpress-3-0-ile-custom-post-types.html