4
2013
Arama İfadesi Bir Kategori / Etiket Adıysa Ona Gitsin
WordPress arama sistemi, WordPress'in yumuşak karnıdır. Ne yazık ki ziyaretçinin aradığı ifadeyle alakasız birçok yazıyı karşısına çıkarır. Bu sistemi bir nebze olsun düzeltmek için şöyle bir düzen kurabiliriz, ziyaretçi diyelim WordPress Eklentileri ifadesini arasın. Diyelim ki bizim de WordPress Eklentileri adında bir kategorimiz var. Bu durumda ziyaretçiyi direkt bu kategoriye yönlendirsek, ya da o ifadeyle aynı isimde bir etiket varsa, o etikete yönlendirsek iyi olmaz mı?
Kendi sitemde bunu sadece etiketler için uyguluyorum. Yani siz WordPress Eklentileri ifadesini aradığınızda benim sitemde başlığında WordPress, Eklentileri ve WordPress Eklentileri ifadelerinden en az birinin geçtiği yazılar ile eğer böyle bir yazı yoksa da bu durumda bu ifadelerin isminde geçtiği etiketlerdeki yazılar karşınıza gelir. Bunu yapmak için kendi yazdığım eklentiyi kullanıyorum. Ama sizin böyle bir eklentiye ihtiyacınız olmayacak. Eğer ilk paragraftaki gibi bir arama düzeni oluşturmak isterseniz, aşağıdaki kodu temanızın functions.php dosyasına uygun şekilde eklemeniz yeterli.
function yakuphoca_arama_kategoriye_gitsin() { if( is_main_query() && is_search() ) { $term = get_term_by('name', get_search_query(), 'category'); //Böyle bir kategori varsa if (!$term) {$term = get_term_by('name', get_search_query(), 'post_tag');} //kategori yoksa ama etiket varsa if ($term){ wp_redirect( get_term_link( $term) ); //İlgili kategoriye ya da etikete yönlendir exit(); } } } add_action( 'template_redirect', 'yakuphoca_arama_kategoriye_gitsin' );
Eğer sitenizde özel taksonomi kullanıyorsanız, aşağıdaki satırın altına özel taksonominizle ilgili koşul da ekleyebilirsiniz.
if (!$term) {$term = get_term_by('name', get_search_query(), 'post_tag');}
Yani yukarıdaki satırın altına aşağıdaki şekilde eklemeler yapabilirsiniz. Örneğin oyuncular adında bir taksonominiz varsa aşağıdaki kod, o taksonomide de arama yapar.
if (!$term) {$term = get_term_by('name', get_search_query(), 'post_tag');} if (!$term) {$term = get_term_by('name', get_search_query(), 'oyuncular');}
Kod, eğer gerekli kontroller sonunda herhangi birine uygun sonuç olmazsa bu durumda normal arama işlemine devam edecektir. Eğer siz aramaları sadece başlıklarla yapmasını isterseniz de WordPress Sitede Aramaları Sadece Yazı Başlıklarıyla Sınırlandırma başlıklı yazımı inceleyin.