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

33 thoughts on “Farklı Kategoriler için Farklı single.php”

      1. bende de aynı sorun oldu ayırdığımız kategoriler çalışıyor ama normal kategoride beyaz sayfa çıkıyor

  1. 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

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

  3. 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

    1. 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.

    2. Öncelikle konuyu paylaşan arkadaşa çok teşekkür ederim…Şu şekilde yapınca çalışıyor..

      elseif ( in_category( array( '12', '13', '14', '143', /*etc*/ ) )) {

      ________________________
      Edit : Yorum yapılalı 3 yıl olduğunu sonradan gördüm :D

  4. hocam sagolun , anlattığınız şekilde yaptım ve sorunsuz çalışıyor…çok tşkler gerçekten son zamanlarda okuduğum en güzel paylaşım buydu..fakat ben
    if ( in_category('3') ) { bunun yerine if ( in_category('3,123,45,64,54') ) { şeklinde yapınca olmadı,acaba bu kodun kullanımı nasıl olmalı bir türlü beceremedim…çünkü ben sitemde hem video hem de normal yazı yayınlıyorum ve şu anda video kategorilerini sıralamak için sizin anlattığınız şekilde tek tek girince kod kalabalığı oluyo..bu sıralama yaparken kodu ne şekilde kullanmam lazım?
    if ( in_category('3,123,45,64,54') ) { bu kullanım dogru mudur,dogruysa hata verıyo,degılse eger,dogrusunu soylersenız cok makbule gecer hocam,tekrardan tşk ederım

    1. alesta, siteni kontrol ettim. yazılarının (videolarının) tümünü sinema kategorisi altına eklersen tek bir kod işini görürü. If döngüsü içerisinde o şekilde sıralama konusunda sıkıntı oluyor onu ben de farkettim. Şu an işlerimden dolayı pek yeni kod geliştiremiyorum. Dediğim gibi bütün videolarını dahil oldukları en üst kategoriye (sinema) eklersen hem if döngüsünde 1 adet döngü kullanmış olursun hem de senin için kalabalık kod olmaz. Bence bunu yap

  5. Hocam şimdi dediğinizi deniyorum,umarım bu şekilde olur,zaten wordpress kasmasın diye elimden geldiğince sadeleştirmeye çalışıyorum,sonucu buraya yazarım denedikten sonra..bu arada ilginiz alakanız için de ayrıca teşekkürler..

  6. Hocam denedim,malesef olmuyo…Şimdi ben bu yöntemle sitede görmüşsünüzdür zaten video öncesi reklam olsun ,fakat yazılarda reklam görünmesin diye düşünüyordum,fakat ana kategori seçince if komutu çalışmıyo,kod kalabılıgı da olsa sonucta çalısıyo ya buna da şükür,yardımlarınızdan dolayı cok teşekkürler ve eğer pagerank kaygınız yoksa linkinizi siteme ekliyorum…tekrar görüşmez üzere..saglıcakla

    1. if komutu içinde ana kategorini belirtirsen çalışma ihtimali var ama denemişsin zaten onu. single php dosyalarında reklamları gösteriyorsan, çalışıyorsa sorun olmaz :) Link? ekle sorun olmaz :) ben teşekkür ederim

  7. :) Kardeşim Allah razı olsun ya, bu sayfayı daha önceden yer imlerine eklemişim ordan denk geldim. Tam da ihtiyacım olan anda. Çok çok işime yaradı kod gerçekten süpersin ya. Çok teşekkür ediyorumsana.

    Hiç anlamıyorum .php'den ama böyle anlatımları okuya okuya koca site yaptım :D.

  8. Ben bu şekilde kullanıyorum fakat aynı iflerin altında bir else if daha ekleyerek post id'ye göre bir single oluşturmak isiyorum fakat olmuyor.

    if ($post->ID == "1814") {….

    şeklinde yani. Hata vermiyor fakat bu post id ile seçilen yazı benim oluşturduğum single sayfasına gitmiyor.

    1. Pembecik,

      O şekilde wordpress üzerinde düzenleme olabileceğini sanmıyorum. Custom Post Types için böyle bir tema çağırma misal portfolio için portfolio-single.php çağırabiliyorsun ama tekil yazılar için bu yapılabilir mi, bu konu hakkında çok fazla bilgi sahibi değilim.

      Mantıksal olarak şunu deneyebilirsin;
      Düzenlemesini yaptığın single.php dosyasını, misal 1814 idli yazın için single-1814.php olarak kaydet ve sunucudaki tema klasörünün içine at. Bu şekilde bir tema yapısını sanırım WordPress görebilir.

      Bunu deneyip haberdar edersen sevinirim. O arada ben de biraz araştırma yapmış olurum bu konu hakkında

  9. Uzun süredir uğraştığım bir sorunu çözdüm sayenizde. Çok teşekkürler :)

  10. Hocam Hay Allah senden razı olsun..Hızır gibi yetiştin..Çok makbule geçti..
    Paylaşım için çok teşekkürler..

  11. teşekkürler üstad çok güzel anlatmışsın uyguladım çok işime yaradı bi sevap daha kazandın :)

  12. single php dediğiniz yere nereden ulaşacağım hocam. wp admin sayfası önümde açık duruyor. bloggerdaki gibi kolayından bir kenarda html kodu düzenle gibi bir seçenek yok. bu single php nerededir?

    1. Özgür bey,

      single.php temanızın klasöründedir. FTP yolu olarak wp-content/themes/aktif temanızın ismi/ wp-admin içinde kod editöründe tekil yazı sayfası olarak görünür. Görünüm menüsü altında.

  13. gayet güzel ve açıklayıcı olmuş fakat search.php de sorun yaratıyorlar sonuçta arşiv görünüşleri farklı örneğin benim sitem film sitesi sinema haberleri var filmler var birde oyuncular kısmı var arama kısmında hepsinin kendi listeleme stilleri var search.php de nasıl bir uygulama yapılmalı bu mantıkta çalışmıyor :) bilginize aramalara da bir çözüm bulabilirsek harika olur :) takipteyim.

  14. Valla kardeşim emeğine sağlık çok yararlı bir paylaşım olmuş. Büyük bir dertten kurtardın beni :)

  15. ayırt etiğim kategori çalışıyor normal yazılarda beyaz sayfa acılıyor

Comments are closed.