Ana Sayfa » »
Ağu
27
2013

Varsayılan Kategoriler Bileşenini Özelleştirme

WordPress ile birlikte birçok bileşen gelmektedir. Bunlardan belki de en çok kullanılanı Kategoriler bileşeni olsa gerek. Ancak bu bileşeni, Yönetim panelindeki Bileşenler bölümünden özelleştirme imkanı pek yoktur, sadece birkaç seçenek sunulur. Bileşenin kodlarını incelediğim zaman gerek bileşen başlığına gerekse de kategorileri veritabanından çekerken kullanılan parametrelere müdahale şansı verdiğini gördüm ve bileşeni her işimizi görecek hale nasıl çevirebilirizin cevabını arayıp, buldum.

Öncelikle eğer bileşeni sitenizde sadece bir kez kullanıyorsanız, bileşenin parametreleriyle oynayıp, istediğiniz bir listeyi oluşturmanız mümkün. Aşağıda bilgisayarımdaki bir WordPress kurulumuna ait kategorileri görüyorsunuz. Gördüğünüz gibi iki tane ana kategori var bunların altlarında birkaç tane alt kategori var.
Sitede Bulunan Kategorilerin Görünümü
Sizin daha çok ana kategoriniz olsun ve yapmak istediğiniz sadece ana kategorileri göstermek olsun. Bunu yapmak için aşağıdaki kodu temanızın functions.php dosyasına uygun şekilde eklemeniz yeterli.

function yakuphoca_kategorileri_ozellestir($args) {
 $args['parent'] = 0;
 return $args;
}
add_filter('widget_categories_args', 'yakuphoca_kategorileri_ozellestir');

Bu kod benim sitemde çalışsaydı, kategoriler bileşeninde sadece Yerli Diziler ve Yabancı Diziler kategorileri görüntülenecekti.
Fonksiyon içerisindeki $args dizi değişkenini WordPress Codex'in wp_list_categories() sayfasında anlatılan parametreleri kullanarak değiştirip, istediğiniz gibi bileşeni özelleştirebilirsiniz. Örneğin bazı kategoriler (3, 5 7 ID'li) görünmesin istiyorsanız, fonksiyon içerisine $args['exlude'] = '3, 5, 7'; satırını eklemeniz yeterli olacaktır. İstediğiniz kadar parametreyi bu mantıkla ekleyip, bileşeni istediğiniz gibi özelleştirebilirsiniz.

Ancak yukarıda da belirttiğim gibi, bu kod sitenize eklediğiniz bütün kategoriler bileşenlerini ekleyecektir. Yani hem sağ hem de sol yan menüye kategoriler bileşenini eklemişseniz, ikisi de aynı şekilde eklenecektir.

Bileşeni Daha Fazla Özelleştirme

Eğer birden fazla yerde kullanmak hem de keyfinize göre özelleştirmek için öncelikle aşağıdaki kodları temanızın functions.php dosyasına uygun şekilde ekleyin. Kodun uzun olduğuna bakmayın, kod içerisine eklediğim açıklama satırları kodların bu kadar uzamasına neden oldu. İsterseniz kodu eklemeden önce başında // ifadesi olan kısımları silebilirsiniz. Kodu ekledikten sonra yazının devamındaki kullanım açıklamalarını okuyup, bileşeni belirli sınırlar dahilinde özelleştirebilirsiniz. Yalnız yukarıdaki kodu eklediyseniz, o kodu ya silmelisiniz ya da fonksiyon isimlerini kod içinden değiştirmelisiniz.

function yakuphoca_kategori_bilesen_basligi_kontrol($title, $instance, $idbase) {
 if ( $idbase == 'categories' ) {
   global $yh_kategori_baslik;
   
   $yh_kategori_baslik = '';
  //Aktif kategorinin alt kategorilerini listeler
   if ( strpos($title, 'aktifkat') !== false )  {
     $yh_kategori_baslik = $title;
	 $aktifkat = get_category(get_query_var('cat'));
	 if ( $aktifkat->term_id ) {
	    //Kategorinin alt kategorileri var mı?
		$children = get_terms( $aktifkat->taxonomy, array(
		'parent'    => $aktifkat->term_id,
		'hide_empty' => 1 //yazısı olmayan kategorileri kontrol etme
		) );
		if($children) { 
		  // alt kategorileri varsa aktif kategorinin adını başlık olarak yazdırılmasını sağla
		  return $aktifkat->name;
  	      //aktif kategorinin adını başlık olarak belirler ancak isterseniz
	      //return $aktifkat->name . ' Kategorisi';
	      //ya da return $aktifkat->name . ' Sezonları'; şeklinde farklı başlıklar oluşturabilirsiniz
		}else{
		  $title = 'altkat_'. $aktifkat->parent;
		  //Eğer aktif kategorinin alt kategorileri yoksa
		  //aktif kategorinin ana kategorisinin alt kategorilerini gösterir
		}
     }else{
	    $varsayilan = explode("_", trim($title));
		if ($varsayilan[1] == '0') {
		   $title = 'anakat';
		   //bileşen başlığı için anakat_bileşen başlığı şeklinde yazın
		}else{
	       $title = 'altkat_' . $varsayilan[1];
	   //eğer aktif bir kategori yoksa yani anasayfa görüntüleniyorsa
	   //aktifkat_xx şeklinde belirttiğiniz alt kategoriyi gösterir
	    }
     }	 
   }

   //Sadece Ana Kategorileri Göstermesini sağla
   //Bileşen başlığı için anakat_bileşen başlığı yazın
   if ( strpos($title, 'anakat') !== false ) {
     $yh_kategori_baslik = 'anakat';
	 //anakat_bileşen başlığı şeklinde belirtilmişse
     $baslik = explode("_", trim($title));
	 if ($baslik[1]) {
	   return $baslik[1];
	 }else{
	   return 'Kategoriler';
	 }
   }

    //altkat_15 Şeklindeki Başlık İçin
   //15 nolu kategorinin alt kategorilerini listeler
   if ( strpos($title, 'altkat') !== false ) {
     $yh_kategori_baslik = $title;
     $altkategori = explode("_", trim($title));
	 $kategori = get_category($altkategori[1]);
     return $kategori->name;
   }  
 }
 return $title;
}
add_filter('widget_title', 'yakuphoca_kategori_bilesen_basligi_kontrol', 10, 3);

function yakuphoca_kategorileri_ozellestir($args) {
 global  $yh_kategori_baslik;
 if ( $yh_kategori_baslik ) {
  if ( $yh_kategori_baslik == 'anakat' ) {
     $args['parent'] = 0;
     //Sadece ana kategorileri göster
  }
  if ( strpos($yh_kategori_baslik, 'aktifkat') !== false ) {
	 $aktifkat = get_category(get_query_var('cat'));
	 if ( $aktifkat->term_id ) $args['child_of'] = $aktifkat->term_id;
	 //Aktif kategorinin alt kategorilerini göster
	 
  }
  if ( strpos($yh_kategori_baslik, 'altkat') !== false ) {
   //altkat_xx şeklinde verilen xx ID'li kategorinin birincil kategorilerini göster
   $altkategori = explode("_", trim($yh_kategori_baslik));
   $kategori = get_category($altkategori[1]);
   $args['child_of'] = $kategori->term_id;
   $args['depth'] = 1;
  }
 }

 return $args;
}
add_filter('widget_categories_args', 'yakuphoca_kategorileri_ozellestir');

Ana Kategorileri veya Bir Kategorinin Alt Kategorilerini Gösterme

Kodları incelediyseniz sistemin bileşen başlığına göre işlediğini görebilirsiniz. Örneğin bileşenlerde sadece ana kategorileri listelemek istiyorsanız anakat başlığını kullanıyoruz. Başlık olarak sadece anakat yazarsanız, Kategoriler başlığı altında sadece ana kategoriler (benim örneğimde Yabancı Diziler ve Yerli Diziler) listelenecektir. Ancak örneğin Dizi Türlerimiz başlığını kullanmak isterseniz de aşağıdaki resimde de göreceğiniz üzere başlık olarak anakat_Dizi Türlerimiz yazmanız yeterli olacaktır.
Ana Kategorileri Gösterme
Tüm özelleştirmeleri bu şekilde başlık bölümüne yazacağımız ifadelerle yapacağız. Diğer bir yapabileceğimiz işlem, belirli bir kategorinin alt kategorilerini listelemek. Örnek sitemdeki Yerli Diziler (ID'si 7) kategorisinin alt kategorilerini listelemek için bileşeni ekledikten sonra başlık kısımına aşağıda olduğu gibi altkat_7 yazmak yeterli. Yani başlık olarak altkat_xx şeklinde xx yerine kategorinizin ID numarasını yazmanız yeterli.
Kategorinin Alt Kategorilerini Gösterme
Bu şekildeki kullanımda başlık olarak kategorinin adı kullanılmaktadır. Bu şekilde iki tane alt alta eklediğim kategoriler bileşeninin sitedeki görünümü aşağıdaki gibi olacak.
Sitedeki Bileşenlerin Görünümleri

Aktif Kategorinin Alt Kategorilerini Gösterme

Sitelerde en çok istenen özelliklerden biri de o anda gösterilmekte olan kategorinin alt kategorilerini göstermektir. Yukarıdaki örnek kategorilerden diyelim ki Yabancı Diziler kategorisi seçildiğinde, bileşen Yabancı Diziler başlığı altında Breaking Bad ve Doctor Who kategorilerini göstersin, Doctor Who kategorisini seçtiğindeyse Doctor Who başlığı altında, bu kategorinin alt kategorileri olan 1. Sezon, 2. Sezon, 3. Sezon kategorilerini göstersin. Peki 2. Sezon kategorisine tıklarsa ne olacak, bu durumda da yani alt kategorisi olmayan bir kategori seçilmişse de tıklanan kategorinin ana kategorisinin alt kategorileri listelensin. Örneğe göre Breaking Bad kategorisi seçildiğinde, bunun alt kategorileri olmadığı için yine Yabancı Diziler kategorisinin alt kategorileri gösterilecek.

Peki bunu nasıl yapacağız? Bileşeni ekledikten sonra başlık alanına aşağıda görüntüdüğü aktifkat_7 şeklinde, aktif kategoriyi göstermesini belirtin. aktifkat_7 ifadesindeki 7 sayısı, ziyaretçi ana sayfadayken ya da tekil yazı okuyorken, kısaca herhangi bir kategoriyi görüntülemiyorken, görünmesini istediğiniz kategorinin ID'sini ifade eder.
Aktif Kategoriyi Gösterme
Eğer bir kategori görüntülenmiyorken, ana kategorileri (benim örneğimde Yabancı Diziler ve Yerli Diziler kategorileri) göstermesini isterseniz de yukarıdaki resimde gördüğünüz gibi aktifkat_0 yazmalısınız. 0 ana kategorileri göstermeyi ifade eder. Başlıkları yazarken _ (alt çizgi) sembolünü yazmayı unutmayınız. Aksi halde sistem iş görmeyecektir.

Buradaki yöntemi kullanarak, son yazılar bileşenini de özelleştirmek mümkün. Örneğin, aktif kategoriden son yazıları göstersin gibi ya da belirli kategoriden son yazıları göstersin gibi değişiklikler yapılabilir ki sanırım bir sonraki yazım da bununla ilgili olacak.

Bu yazımı beğendiyseniz, bu kategoride yer alan WordPress Giriş Ekranını İyileştirme başlıklı functions.php, giriş ekranı ve kullanıcılar konularında bilgi veren bir önceki yazımı da okumanızı tavsiye ederim.

Yorumunu Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık