Thiết lập tìm kiếm chính xác trong WordPress

Thiết lập tìm kiếm chính xác trong WordPress

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:

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 đề

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.

Click to rate this post!
[Total: 8 Average: 2.9]

Hoàng An

Tôi không phải là 1 chuyên gia lập trình, cũng không phải là 1 chuyên gia SEO. Với niềm đam mê với CNTT, tôi có thể biến ý tưởng thành sản phẩm và thích chia sẻ kiến thức cho người khác. Nếu có duyên, mời bạn đến với khoá học của tôi
5 1 đánh giá
Article Rating
Theo dõi
Thông báo của
guest

3 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Phạm Ngọc Tưởng
3 năm trước

Chú ý: Câu lệnh không đúng cần thay đổi nội dung trong mục 1 – Tìm kiếm chính xác trong tiêu đề và nội dung


$search.= "{$searchand}($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]')";


Thay đổi thành: Nếu chưa rõ có thể hỏi https://www.facebook.com/lionelphamit


$search.= "{$searchand}(($wpdb->posts.post_title REGEXP '[[:<:]]{$term}[[:>:]]') OR ($wpdb->posts.post_content REGEXP '[[:<:]]{$term}[[:>:]]'))";


Screenshot_1.png
Phạm Ngọc Tưởng
3 năm trước

Pic 2

Screenshot_2.png
3
0
Rất thích suy nghĩ của bạn, hãy bình luận.x