31 Temmuz 2009

WordPress Aramalarını Kategoriyle Sınırlamak

WordPress Yorum Ekle

WordPress'in ne yazık ki en zayıf yanı arama sistemi olsa gerek. Ne yazık ki WP aramaları istediğimiz gibi özelleştirememize izin verecek bir arama formu sunmuyor. Bu konuyla daha sonra ilgilenmeyi düşünüyorum, ancak şimdilik belirli bir kategoride nasıl arama imkanı sunabiliriz'in cevabını vermekle yetineceğim.
Vereceğim yöntemlerde size sadece arama formlarını oluşturmak için gerekli kodları vereceğim. Formu nereye eklemek istiyorsanız oraya elle eklemeniz gerekecek. Tabi ki bir hayırsever bunu bileşen haline getirirse elbetteki iyi olur.

Sadece Belli Bir Kategoride Arama Yapmak

Diyelim ki sitenizde aramaların sadece ID'sini bildiğiniz belli bir kategoride yapılmasını istiyorsunuz. Bu durumda standart arama formu kodlarına 'cat' isminde, değeri kategori ID'si olan gizli bir form elemanı ekliyoruz. Kodların son hali şöyle:

  1. <?php
  2. $arama_formu = '<form role="search" method="get" id="searchform" action="' . get_option('home') . '/" >
  3.     <div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
  4.     <input type="text" value="' . esc_attr(apply_filters('the_search_query', get_search_query())) . '" name="s" id="s" />
  5.     <input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
  6.     <input type="hidden" name="cat" value="3" />
  7.     </div>
  8.     </form>';
  9. echo $arama_formu;
  10. ?>

Kod bildiğiniz arama formu kodu olup, biz sadece değeri "3" olan "cat" isimli gizli form elemanını ekledik. "3" değerini hangi kategoride arama yapılmasını istiyorsanız onun ID'si ile değiştirin.

Açılır Kutudan Kategori Seçme İmkanı Vermek

Yukarıdaki yöntem bazılarının işini görse de çoğu kişi, eminim, ziyaretçinin sitedeki kategorilerden istediğini seçip, onda arama yapmasını istiyordur. Bunu yapmak için ise aşağıdaki form kodlarını kullanabilirsiniz.

  1. <?php
  2. $arama_formu = '<form role="search" method="get" id="searchform" action="' . get_option('home') . '/" >
  3.     <div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
  4.     <input type="text" value="' . esc_attr(apply_filters('the_search_query', get_search_query())) . '" name="s" id="s" />
  5.     <input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
  6.  <br />'.
  7.   wp_dropdown_categories('show_option_all=Tüm Kategoriler&hierarchical=1&echo=0')
  8.     .
  9.     '</div>
  10.     </form>';
  11. echo $arama_formu;
  12. ?>

Yukarıdaki kodları kendi bilgisayarımda denediğimde aşağıdaki gibi bir ekran görüntüsü elde ettim.

Ya da yan menümdeki arama formunu inceleyebilirsiniz.
Koddaki wp_dropdown_categories() fonksiyonu, sitedeki kategorileri istediğimiz gibi açılır kutu (liste) olarak göstermemizi sağlar. Temanızın stil dosyasına aşağıdaki kodları ekleyerek açılır listenin yüksekliğini artırabilirsiniz. Aşağıdakiler kendi style.css dosyamda kullandığım biçimlendirme kodları.

  1. #searchform #cat {
  2.   height:28px;
  3.   padding:3px;
  4.   margin-top:5px;
  5. }

İşin Esprisi Nedir?

WordPress'in arama formu aranan ifadeyi basit bir formla "GET" metodunu kullanarak, gönderir ve işler. Bizim yaptığımız ise "cat" isminde bir form elemanına, hangi kategoride arama yapılmasını istiyorsak, o kategorinin ID'sini değer olarak vermekti. Her iki yöntemde de forma "cat" isminde bir form elemanı eklenmektedir.
Bu form elemanına birden fazla kategorinin ID'sini aşağıdaki gibi ekleyerek, aramayı birden fazla kategoriyle de sınırlayabilirsiniz.

  1. <input type="hidden" name="cat" value="3,6,7,10" />

Aslında olaya biraz JavaScript kodlarını katarak, kullanıcının seçtiği birden fazla kategoride arama yaptırabilirsiniz. Bu da size ödev olsun. 😛


Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=943.

Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.


“WordPress Aramalarını Kategoriyle Sınırlamak” yazısı için 2 Yorum

Bu yazıya yapılan yorumları dilerseniz, ( RSS 2.0 ) beslemesini kullanarak takibe alabilirsiniz.

  1. CooLXviD dedi ki:

    Hocam ellerinize sağlık yine faydalı bir döküman sunmuşsunuz..

    Bu tatil işi Bizim için baya bi uzadı..Okul açıldı derslerimiz boş geçiyor İnşallah iyi dinlenmişsinizdir...WP Forum zaten dibe vurdu WPUzmani sağolsun onda biraz gayret var...Bunun dışında WP için sürekli yabancı kaynaklara başvuruyoruz..

  2. Mehmet dedi ki:

    Çok teşekkürler hocam. Yine çok faydalı bir konuya el atmışsınız. Makalelerinizin devamını bekliyoruz...