Farklı Kategoriler için Farklı single.php

Evet tam da bu ipucunun başlığında yazan şeyi anlatacağım bugün. Dün geceyi sabaha bağlarken Hakan’ın Vectorss ü üzerinde çalışırken farkettiğim if ve else kullanımının nelere kadir olduğunu anlatan bir ipucu. Aslı astarı benim kafamdan çıkan ama kodlarda WordPress Codex alanından da yardım aldığım bir kod bütünlüğü. Neden Codex’ten yardım aldım? Çünkü WordPress yapısına aykırı olur mu diye sormak için. Nitekim yaptığım aramalar sonucu bunun gibi bir durumun WordPress’in kendi içinde tınmayacağı birşey olduğunu görünce hemen yola koyuldum, belkide bugüne kadarki en iyi ve temiz kodumu yazdım :D

Geçelim kodlara…

Durum: Bazı kategorilerinizde reklam göstermek ama bazılarında reklam göstermemek istiyorsunuz. Yada buna benzer bir durum var ama tek bir single.php içinde bu zor. Yani farklı kaegoride farklı sayfalar kullanmak istiyorsunuz. Bunun için eklentiler var ama belki benim yaptığım şey aslında daha basit gelecektir.

Hazırlığa Başlayalım…

WordPress içerisindeki single.php yani yazıların iç sayfası olarak bilinen alanı editleyeceğiz. Lütfen WordPress kod yapısını tam kavrayamamış yada hiç bilmeyen arkadaşlar bu kodları uygulamaya çalışmasınlar. Bir bilenden destek alınız. Ve bu kodlar Kendi hostunuzda barındırdığınız WordPress siteniz için geçerli olacaktır.

Öncelikle single.php dosyanızın bir kopyasını bilgisayarınıza oluşturun çünkü sitenizdeki single.php dosyası içinde ana değişikliği yapacağız ve iki farklı single-xx.php dosyamızı onun üstünden çağıracağız. Şimdi yedeklerinizi alığınıza göre kodlara geçelim.

Kodlar…

<?php
$post = $wp_query->post;
if ( in_category('3') ) {
 include(TEMPLATEPATH . '/single-blog.php'); }
 else { include(TEMPLATEPATH . '/single-default.php');
}
?>

Bu asıl kodda iki farklı dosyada yazılarımızı göstermeyi görüyoruz. If ve Else kullanımının bize faydalarını anlatmaya başlıyorum. Burada öncelikle gene wp_query nin güzel bir kullanımını görüyoruz. Yazıyı çağırıyoruz üst alada ve if alanında ise kategori 3 içinde bulunan (dikkat edin kategoriyi sayısal bir değer olarak verdim) yazılar single.php ile açılmaya çalışılırsa yani devamını oku gibi bir durum ortadaysa tema alanında bulunan single-blog.php dosyası içinde aç, eğer değilse else ile single-default.php alanında aç (single-default.php single.php kopyasıdır) demiş olduk. Bunu farklı kategoriler için de kullanabiliriz ancak önce mantığı anlatmak istiyorum.

Bu gördüğünüz kodu single.php dosyasının içindeki tüm bilgiyi sıfırlayarak yerleştiriyoruz. single.php dosyası bu kodun içine aktarılmasından sonra yönlendirme dosyası oluyor. Burada önceden kopyasını aldığımız single.php için bir kopya daha (kaç kategori için değişiklik düşünüyorsanız o kadar kopya alın) oluşturup adını single-blog.php yapın. (Örnekte blog alanını yapmıştık o kaldı) sonra elinizdeki orjinal dosyayı da single-default.php yapın ve single-blog.php dosyasını istediğiniz şekilde düzenleyip bu iki dosyasyı hostunuza atın.

Burada unutmamanız gereken şey kategori numarası. Bu numaraya kategoriler alanında kategori isminin üzerine gelerek durum çubuğunda çıkan id=xxx alanından alabilirsiniz.

Buraya kadar anlatabildiğimi düşünüyorum ama anlamadığınız yer varsa yorum bırakarak cevap isteyebilirsiniz.

Şimdi birden fazla kategori için farklı farklı sayfalar açmak istiyorsanız aşağıdaki kodu ve yukarıda anlattıklarımı her dosyaya uyguayarak devam edeceksiniz.

İşte o Kod..

<?php
$post = $wp_query->post;
if ( in_category('3') ) {
include(TEMPLATEPATH . '/single-blog.php'); }
elseif ( in_category('15') ) {
include(TEMPLATEPATH . '/single-foto.php'); }
elseif ( in_category('18') ) {
include(TEMPLATEPATH . '/single-video.php'); }
else { include(TEMPLATEPATH . '/single-default.php');
}
?>

Burada da farklı kategoriler için farklı dosyalar kullanabilme yetisine sahip olduk.

Bu yazı biterken biten şarkı : Linkin Park – Headstrong

Selametle





  • cem

    dostum dediğini eynen uyguladım ama beyaz bi sayfa oluyo

    • http://www.kaisercrazy.com Serkan Algur

      Selam cem. Tam olarak ne yaptığını ve adresi bana iletişim alanından anlatabilirmisin? Ben ilgileneyim.

  • http://www.faceroot.com/ Murat ÜNAL

    Sayın Serkan Algur, vermiş olduğunuz bilgiler için teşekkür ederim. Ellerinize sağlık. 3 gündür özel bir single.php oluşturmaya çalışıyordum sayende çözdüm

  • http://www.kaisercrazy.com Serkan Algur

    Ben teşekkür ederim yardımcı olabildiysem ne mutlu bana.

  • http://www.mobilhat.com İsmail

    Uzun zamandır aradığım bir konuydu hocam birazdan denemelere başlayacağım çok teşekkürler forumda olsaydım rep verirdim :D

    • http://intensedebate.com/profiles/kaisercrazy Serkan Algur

      Rep falan gerek yok :) Yardımcı Olabildiysek ne mutlu…

  • http://alesta-panel.com alesta

    hocam anlatımınız için çok teşekkürler,tam aradığım şeydi bu..fakat bir sorum olucak,mesela post;
    if ( in_category(’3′) ) {
    include(TEMPLATEPATH . ‘/single-blog.php’); }
    else { include(TEMPLATEPATH . ‘/single-default.php’);
    }
    ?> bu verdiğiniz kod içinde categorileri 3 değilde hani 3,15,24,21 vs gibi nasıl sıralayabiliriz..tşkler tekrardan

    • http://www.kaisercrazy.com Serkan Algur

      alesta verdiğim ikinci kodu kategorileri sıralamakta ve gerekirse aynı sayfalara yönlendirmekte kullanabilirsin. elseif komutu bu gibi şeyler için idealdir. Ama senin yazarken sıraladığın gibi kategori numaraları arasında virgül ile 3,4,5,… vb kullanarak da bu işlem olabilir.

Yukarı