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.

[Total: 6   Average: 3.5/5]

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
0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
1
0
Would love your thoughts, please comment.x
()
x