WordPress tabanlı projenizdeki yazılarınızda (posts) birden fazla Kategori kullanıyor fakat site içi arama özelliğinizin sadece belli bir tanesi için çalışmasını istiyorsanız, bu yöntem sizin için.
Öncelikle şunu hatırlatmakta fayda var: Eklenti kullanmadan yapabileceğiniz basit işlemler için sitenize lütfen eklenti kurmayın! Bunun 2 ana sebebi var:
- Güvenlik: Eklentiler o eklentiyi yazan kişinin inisiyatifindedir. Siz yüklediğiniz sırada bir güvenlik açığı olmasa bile, ileriki bir tarihte, o eklentinin kodlarında bir güvenlik açığı ortaya çıkabilir ve haberiniz bile olmaz.
- Hız: Eklentiler kaynak tüketir. Ayrıca her biri ayrı birkaç işlem yürüttüğünden sayfanızın açılış hızına olumsuz etkileri olur.
Peki Ne Yapacağız?
Eğer ne yaptığınızı biliyorsanız, mümkün olduğu kadar sitenizin kodlarına siz müdahale edin. Buradaki örneğimizde WordPress’in functions.php
dosyasına basit bir fonksiyon ekleyerek sorunumuzu çözeceğiz.
Örnek Olay: Marinalar.com
Marinalar.com ‘u yayına hazırlarken arama konusunda bir sorun yaşadık. “Yazı” olarak tanımlanan 2 çeşit içeriğimiz vardı: Haberler ve Marinalar. Fakat kullanıcı deneyimi araştırmamız sonucunda arama özelliğinin haberleri kapsamasının gerekli olmadığı, hatta çoğunlukla dikkat dağıtıcı olduğu ortaya çıkmıştı. Yani arama sonucu sadece Marina’ları listelemeliydi.
Yaptığımız araştırma sonunda, bu sorunu ön yüzden değil de, koddan çözebileceğimizi keşfettik.
Gelin size 2 adımda bu işlemi nasıl kolaylıkla halledebileceğinizi anlatayım.
Hangi Kategori’de Arama Yapılacak?
İlk bilmemiz gereken, arama yapmak istediğiniz kategorinin ID’sini öğrenmek olacak. Bunun için wordpress sitenizin sol menüsünden Yazılar
> Kategoriler
seçeneğine giriyoruz.
Ardından, ID’sini öğrenmek istediğimiz kategorinin üzerine fare ile gelerek bağlantı adresindeki tag_ID=
kısmını arıyoruz. Bunu ister bağlantıya sağ tıklayıp “öğeyi denetle” diyerek, ister bağlantı adresinin ne olduğuna bakarak öğrenebilirsiniz.
Örneğimizde tag_ID=63
yazıyor. Yani WordPress sitemizde Marinalar kategorisinin ID’si 63’müş. Biz de kodumuzda bu sayıyı kullanacağız.
Sıra geldi kodumuzu yazmaya
functions.php içerisinde yeni bir fonksiyon yazıyoruz:
// TEK KATEGORIDE ARAMA
function single_category_search( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_search ) {
$query->set( 'cat', '63' ); // Hangi Kategori ID'sinde Aransın
}
}
add_action( 'pre_get_posts', 'single_category_search', 1 );
Hepsi bu kadar.
Artık WordPress sitenizde yapacağınız tüm aramalar belirlediğiniz kategori içerisinde gerçekleşecek ve sonuçlar sadece bu küme içerisinden sunulacak.
Burada kullandığımız pre_get_posts
hakkında detaylı bilgi için: https://developer.wordpress.org/reference/hooks/pre_get_posts/