Một số đoạn code tối ưu hóa kết quả tìm kiếm trong Wordpress

Wordpress xây dựng sẵn chức năng tìm kiếm bạn có thể giễ ràng sử dụng theo cấu trúc theme của Wordpress, nhưng chức năng tìm kiếm mặc định của wordpress tìm tất cả mọi thứ và hiển thị thường không như bạn mong muốn, bài viết sau tổng hợp một số đoạn code nhỏ giúp chức năng tìm kiếm mặc định của Wordpress tốt hơn nhiều.

Chuyển hướng tới bài viết nếu chỉ có một kết quả tìm kiếm

Khi tìm kiếm được thực thi, Wordpress sẽ sử dụng trang search.php để hiển thị kết quả tìm kiếm, ở file này bạn có thể tùy chỉnh danh sách kết quả tìm kiếm trả về, nhưng có một ý tưởng hay là nếu trong trường hợp kết quả tìm kiểm chỉ có một và bạn muốn điều hướng tới trang chi tiết của kết quả tìm được luôn, bạn có thể thêm đoạn code ngắn sau vào file function.php của bạn, nguồn từ paulund.co.uk

add_action('template_redirect', 'vkstw_redirect_single_post');
function vkstw_redirect_single_post() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1) {
            wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
        }
    }
}

Hiển thị số lượng kết quả tìm được

Thông thường khi thực hiện tìm kiếm Wordpress không trả về số lượng kết quả tìm được, bạn có thể lấy chuỗi từ khóa bằng hàm get_search_query(). Đoạn code sau sẽ tối ưu với việc hiển thị chuỗi từ khóa và số lượng kết quả tìm được dưới dạng "Search Result for search terms – 12 Articles", nguồn từ problogdesign.com

function vkstw_title_search_result(){
    echo '<h2 class="pagetitle">Search Results for';
    /* Search Count */
    $allsearch = &new WP_Query("s=$s&showposts=-1");
    $key = wp_specialchars($s, 1);
    $count = $allsearch->post_count; _e('');
    _e('<span class="search-terms">');
    echo $key; _e('</span>'); _e(' — ');
    echo $count . ' '; _e('articles');
    wp_reset_query();echo '</h2>';
}

Hightlight kết quả tìm kiếm với chuỗi từ khóa

Trong file search.php trước khi xuất tiêu đề của bài viết được tìm thấy bạn có thể sử lý để làm nổi bật từ khóa tìm được trong kết quả tìm kiếm

    $title = get_the_title();
    $keys= explode(" ",$s);
    $title = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-excerpt">\0</strong>', $title);

Lọc kết quả tìm kiếm

Sử dụng add_action "pre_get_posts", để lọc kết quả tìm kiếm như loại bỏ category, post type, giới hạn kết quả... Tham khảo thêm tại codex.wordpress.org. Ví dụ:

// Loại bỏ category với id là 1
function vkstw_search_filter($query) {
    if ($query->is_search) {
        $query->set('cat','-1');
    }
    return $query;
}
add_action('pre_get_posts','vkstw_search_filter');

// Chỉ tìm kiếm post type là post và giới hạn 10 kết quả một trang
function vkstw_search_filter($query) {
    if ($query->is_search) {
        $query->set('post_type','post');
        $query->set('posts_per_page',10);
    }
    return $query;
}
add_action('pre_get_posts','vkstw_search_filter');
Tags: Wordpress
  • Chia sẻ
comments powered by Disqus