WordPress'in eski sürümlerinde, /search/ uzantısı ile arama yaparken, maalesef ki boşluk sorunu söz konusu. Yani URL'nin içerisinde boşluk parametresi olan, "%20" var ise, arama sonuçsuz bilgi döndürmektedir. İlgili sorun, elbette güncel WordPress sürümlerinde çözülmüştür. Ancak eğer ki WordPress'in eski bir sürümünü kullanıyor ve bu tip bir sorun yaşıyorsanız, aşağıdaki kodları temanızın functions.php dosyası içerisine eklemeniz yeterli olacaktır. Böylelikle, "/search/örnek%20arama" şeklinde arama URL'sinde boşluk da olsa, sorunsuz olarak arama sonuçları listelenmiş olacaktır.
AYRICA: WordPress Aramalardaki Özel Karakter Sorunu ve Çözümü
WordPress Aramalardaki Boşluk Sorunu ve Çözümü
add_filter('posts_search', 'smcln_fix_search', 10, 2);
function smcln_fix_search($search, $wp_query) {
global $wpdb;
if ($GLOBALS['wp_query'] !== $wp_query) {
return $search;
}
if ( ! empty( $_GET['s'] ) ) {
return $search;
}
$q = &$wp_query->query_vars;
$decoded = urldecode( $q['s'] );
if ( $decoded == $q['s'] ) {
return $search;
}
$search = '';
$q['s'] = $decoded;
if ( !empty($q['sentence']) ) {
$q['search_terms'] = array($q['s']);
} else {
preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q['s'], $matches);
$q['search_terms'] = array_map('_search_terms_tidy', $matches[0]);
}
$n = !empty($q['exact']) ? '' : '%';
$searchand = '';
foreach( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";
$searchand = ' AND ';
}
if ( !empty($search) ) {
$search = " AND ({$search}) ";
if ( !is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
Yorum bulunmamaktadır.