Chú ý: Có thay đổi cho đúng hơn.
Copy Gốc:
$search.= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]')";
Thay đổi:
$search .= " {$searchand}(($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]')) ";
Tôi thấy nhiều bạn có ý kiến về việc công cụ tìm kiếm của WordPress hơi cùi bắp, tìm kiếm không chính xác.
Nay tôi xin phép viết 1 bài chia sẻ cách thiết lập để công cụ tìm kiếm của WordPress chính xác hơn.
Trong bài này, tôi có 2 phần
Thiết lập tìm kiếm chính xác (Tìm cả trong tiêu đề và nội dung)
Thiết lập tìm kiếm chính xác (Chỉ tìm trong tiêu đề)
1 – Tìm kiếm chính xác trong tiêu đề và nội dung
Các bạn, hãy mở file functions.php của theme đang sử dụng và bỏ vào đó đoạn code sau:
Copy add_filter('posts_search', 'pvs_search_is_exact', 20, 2);
function pvs_search_is_exact($search, $wp_query){
global $wpdb;
if(empty($search))
return $search;
$q = $wp_query->query_vars;
$n = !empty($q['exact']) ? '' : '%';
$search = $searchand = '';
foreach((array)$q['search_terms'] as $term) :
$term = esc_sql(like_escape($term));
$search .= " {$searchand}(($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]')) ";
$searchand = ' AND ';
endforeach;
if(!empty($search)) :
$search = " AND ({$search}) ";
if(!is_user_logged_in())
$search .= " AND ($wpdb->posts.post_password = '') ";
endif;
return $search;
}
2 – Tìm kiếm chính xác chỉ trong tiêu đề
Copy add_filter('posts_search', 'pvs_search_is_exact', 20, 2);
function pvs_search_is_exact($search, $wp_query){
global $wpdb;
if(empty($search))
return $search;
$q = $wp_query->query_vars;
$n = !empty($q['exact']) ? '' : '%';
$search = $searchand = '';
foreach((array)$q['search_terms'] as $term) :
$term = esc_sql(like_escape($term));
$search.= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]')";
$searchand = ' AND ';
endforeach;
if(!empty($search)) :
$search = " AND ({$search}) ";
if(!is_user_logged_in())
$search .= " AND ($wpdb->posts.post_password = '') ";
endif;
return $search;
}
Kết luận
Trên đây là thủ thuật nhỏ dựa trên các dự án thực tế của tôi. Hy vọng nó hữu ích với bạn. Nếu có bất kỳ câu hỏi nào, vui lòng comment dưới bài viết này.