Anasayfada bazı kategorilerin yazılarını gizlemek

Bazı durumlarda WordPress sitemizin anasayfasında bazı kategorilerin yazılarının listelenmesini istemediğimiz durumlar olabilir. Bu yazıda WordPress altyapısına sahip bir sitenin anasayfasında bazı kategorilere ait yazıların görünmesini engellemek için yapabileceklerimizi anlatmaya çalışacağım.

Bu iş için yine her zaman olduğu gibi birden fazla çözüm yolumuz mevcut. Bu çözümleri uygulayabilmek için kategorilerin ID değerlerini bilmemiz gerekmektedir. Kategori ID’lerini yönetim panelinde kategorileri listeleyip mouse ile Düzenle bağlantısının üzerlerine gelerek görebilirsiniz.

Seçenek 1:

İlk seçeneğimiz in_category() fonksiyonundan yararlanmak olacaktır.

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

index.php dosyamızda yer alan yukarıdaki kodu bulup koddan hemen sonra aşağıdaki kodu ekliyoruz. Kodda 1 gördüğümüz yere kategori ID numarasını yazıyoruz.

<?php if (in_category('1')) continue; ?>

Eğer birden fazla kategorinin yazılarını gizleyeceksek aşağıdaki şekilde in_category() fonksiyonumuzu tekrarlıyoruz.

<?php if ( (in_category('1')) || (in_category('5'))  || (in_category('20')) ) continue; ?>

Seçenek 2:

İkinci seçeneğimiz; query_posts() fonksiyonuna parametreler vererek bu işlemi yapmaktır. index.php dosyamızda yer alan döngü başlangıcı öncesi bu fonksiyonu kullanarak sitemizin anasayfasında bir veya birden çok kategorinin yazılarının çıkmasını engelleyebiliyoruz.

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

index.php dosyamızda yer alan yukarıdaki kodu bulup aşağıdaki kod ile değiştiriyor ve cat=-1 yazan bölüme kategori ID numarasını – (eksi) işareti vererek yazıyoruz.

<?php if (have_posts()) : query_posts("cat=-1"); while (have_posts()) : the_post();?>

Birden çok kategorinin yazılarını listelememek için başına – (eksi) koyduğumuz kategori ID numaralarını virgülle ayırıp ardarda yazıyoruz.

<?php if (have_posts()) : query_posts("cat=-1,-5,-20"); while (have_posts()) : the_post();?>

Bu düzenlemenin ardından işlemimiz bitti mi? Hayır. Bu yazdığımız kod anasayfamızda gayet düzgün bir şekilde çalışacaktır fakat önceki yazıları görmek için diğer sayfalara geçmek istediğimizde problem çıkartacak ve daima anasayfadaki yazılar görünecektir. Bu sorunun önüne geçmek için bir düzenleme daha yapmamız gerekiyor. Bu düzenleme ile kodumuzun son hali şu şekilde olacaktır.

<?php if (have_posts()) : $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("cat=-1,-5,-20&paged=$paged"); while (have_posts()) : the_post();?>

Artık “Önceki Yazılar” bağlantımız (Eğer bir sayfalama eklentisi kullanıyorsak sayfa numaralarımız) da sorunsuz bir şekilde çalışacak ve 2., 3. sayfalara geçişte herhangi bir problemle karşılaşmayacağız.

Seçenek 3:

Temamızın functions.php dosyasına ekleyeceğimiz bir filtreleme fonksiyonu ile de mevzubahis işlemimizi gerçekleştirebiliriz. Yine diğer iki yöntemde de olduğu gibi bu işlemi de kategorilerimizin ID numaralarını kullanarak yapıyoruz.

/*
* Anasayfada bazı kategorilere ait yazıları gizlemek
* http://tercan.net/
*/
function catExclude($query) {
if ($query->is_home) {
if (!$query->get('cat'))  {
$query->set('cat','-1,-5,-20');
}
}
return $query;
}
add_filter('pre_get_posts','catExclude');

Kaynaklar:
1. Cre8ive Commando
2. http://hameedullah.com/how-to-exclude-a-category-from-your-main-wordpress-index-and-rss-feed.html

Yorumlar (8)

  1. Çok güzel anlatmışsın teşekkürler. :)

  2. Aşağıya ekledğim kodda fix şartında sadece 1 kategoriyi çalıştrabiliyorum. 1,2,3 gibi yaptığımda kod işlevsizleşiyor. Bu sorunu nasıl aşabilirim?
    İyi çalışmalar dilerim.

    /* Beliri bir kategorinin yazılarını sadece üyelere gösterir. */
    function kategori_yazi_sinirlayici($content){
    $fix = “1”;
    if(in_category($fix)){
    if ( !is_user_logged_in() ) {
    return “Kategorilendirilmemiş yazılarımıza erişmeye çalışıyorsunuz.. Lütfen giriş yapınız. (Sadece okul personelimiz)Öğretmenlerimiz kullanıcı adı ve şifrelerini okul yönetiminden öğrenebilirler.”;
    } else {
    return $content;
    }
    } else {
    return $content;
    }
    }
    add_filter(‘the_content’, ‘kategori_yazi_sinirlayici’);

  3. çok teşekkürler. uzun zamandır aramasam dahi zaman zaman arıyordum bunu. çok basitmiş. bunu yaptım.

  4. Gercekten cok ise yaradi bu bilgiler. Tesekkur ederim

  5. klavyeye tuşlarına basan parmaklarınıza sağlık, harika bi paylaşım olmuş :))

  6. Hocam çok teşekkürler, ne yalan söyleyeyim “şimdi kimse yazmamıştır bunu, nereden bulacağım” diye düşünürken güzel bir anlatımla siteniz çıktı karşıma. Tekrar teşekkürler.

  7. yok böyle bir anlatım teşekkürler..

  8. Teşekkürler. Functions dosyasında yaptığım değişiklik işe yaradı.

Bir Cevap Yaz

E-posta hesabınız yayınlanmayacak. Lütfen bütün alanları doldurun.