Chức năng tìm kiếm được coi như là chìa khóa thành công của một trang web, hoặc blog. Nó không những giúp người dùng tìm kiếm chính xác nội dung bài viết mà họ cần đọc, mà nó còn cải thiện đáng kể thời gian cũng như tính tiện dụng của trang web. Trong bài viết này ,mình xin chia sẻ cho các bạn 10 đoạn code rất hay, với những đoạn code này, các bạn sẽ có thể nâng cao khả năng tìm kiếm trong trang web hay blog của các bạn.
1 Loại bỏ Pages hoặc Posts khỏi danh sách tìm kiếm
Trong trường hợp các bạn không muốn trang (Pages) hoặc bài viết (Posts) nào xuất hiện trong danh sách tìm kiếm , các bạn chỉ cần việc copy đoạn code sau và dán nó vào file functions.php. Trong đoạn code sau, nó sẽ loại bỏ tất cả các bài viết với categories có ids lần lượt là 0 và 1, các bạn chỉ cần việc thay đổi id của category nào mà các bạn muốn loại bỏ là được.
function SearchFilter($query) { if ($query->is_search) { $query->set('cat','0,1'); } return $query; } add_filter('pre_get_posts','SearchFilter');
2 Nếu kết quả tìm kiếm chỉ có 1 bài viết, tự động redirect đến bài viết đó.
Chắc hẳn là các bạn sẽ không muốn người dùng phải click chuột vào kết quả tìm kiếm mà chỉ có 1 kết quả trả về. Sử dụng đoạn code sau và dán nó vào file functions.php để nó chuyển ngay đến bài viết đó.
add_action('template_redirect', 'redirect_single_post'); function redirect_single_post() { if (is_search()) { global $wp_query; if ($wp_query->post_count == 1) { wp_redirect( get_permalink( $wp_query->posts['0']->ID ) ); } } }
3. Search Form với Drop Down có categories
Sẽ tốt hơn rất nhiều nếu như người dùng có thể kiếm bài viết và lọc nó theo category mà họ muốn. Copy đoạn code sau vào bất kì file nào mà các bạn muốn hiển thị form tìm kiếm.
< form role="search" method="get" id="searchform" action="<?php bloginfo('siteurl'); ?>"> <div> <label class="screen-reader-text" for="s">Search for:</label> <input type="text" value="" name="s" id="s" /> in <?php wp_dropdown_categories( 'show_option_all=All Categories' ); ?> <input type="submit" id="searchsubmit" value="Search" /> </div> </form>
4 Hiển thị số lượng kết quả trả về.
Theo mặc định thì WordPress sẽ không trả lại số lượng tìm kiếm của từ khóa , để làm được việc này thì các bạn thay thế đoạn code sau trong file search.php :
<h2 class="pagetitle">Search Results</h2>
bằng đoạn code này :
<h2 class="pagetitle">Search Results for <?php /* 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(); ?></h2>
5 Lọc kết quả tìm kiếm theo post type
Các bạn có thể tạo thêm chức năng lọc bài viết theo kiểu bài viết (post type) bằng cách dán đoạn code sau vào file functions.php .
function SearchFilter($query) { if ($query->is_search) { // Insert the specific post type you want to search $query->set('post_type', 'feeds'); } return $query; } add_filter('pre_get_posts','SearchFilter');
6 Tô đậm kết quả tìm kiếm
Trong search.php, thay thế the_title() function với echo $title; đồng thời copy đoạn code sau nằm trước đoạn code mà chúng ta vừa thay thế.
<?php $title = get_the_title(); $keys= explode(" ",$s); $title = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-excerpt"></strong>', $title); ?>
7 Sử dụng jQuery để highlight từ khóa tìm kiếm
Sẽ thật tuyệt vời nếu như các từ khóa tìm kiếm được hightlight trong các tiều đề bài viết được trả về. Đầu tiên, các bạn copy đoạn code sau vào file functions.php
function hls_set_query() { $query = attribute_escape(get_search_query()); if(strlen($query) > 0){ echo ' <script type="text/javascript"> var hls_query = "'.$query.'"; </script> '; } } function hls_init_jquery() { wp_enqueue_script('jquery'); } add_action('init', 'hls_init_jquery'); add_action('wp_print_scripts', 'hls_set_query');
Sau đó là copy đoạn code sau vào file header.php
<style type="text/css" media="screen"> .hls { background: #D3E18A; } </style> <script type="text/javascript"> jQuery.fn.extend({ highlight: function(search, insensitive, hls_class){ var regex = new RegExp("(<[^>]*>)|(\b"+ search.replace(/([-.*+?^${}()|[]/\])/g,"\$1") +")", insensitive ? "ig" : "g"); return this.html(this.html().replace(regex, function(a, b, c){ return (a.charAt(0) == "<") ? a : "<strong class=""+ hls_class +"">" + c + "</strong>"; })); } }); jQuery(document).ready(function($){ if(typeof(hls_query) != 'undefined'){ $("#post-area").highlight(hls_query, 1, "hls"); } }); </script>
8 Thay đổi giới hạn số lượng bài viết trả về
Theo mặc định thì WordPress sẽ trả về 10 bài viết sau mỗi lần tìm kiếm, để thay đổi số lượng này, các bạn copy đoạn code sau vào file functions.php , như trong đoạn code này ,thì số lượng trả về sẽ là 20.
function limit_posts_per_search_page() { if ( is_search() ) set_query_var('posts_per_archive_page', 20);
9 Không giới hạn số lượng bài viết trong WordPress search
Nếu các bạn muốn trả về tất cả các kết quả tìm kiếm mà không cần giới hạn thì thay thế đoạn code sau trong file search.php.
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
bằng đoạn code :
<?php $posts=query_posts($query_string . '&posts_per_page=-1'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
10 Ngăn chặn hoàn toàn khả năng tìm kiếm
Nếu như vì một lý do nào đó mà các bạn không muốn chức năng tìm kiếm có thể hoạt động được ở trang web hay blog của mình, thì chỉ cần copy đoạn code sau vào file functions.php là được.
function fb_filter_query( $query, $error = true ) { if ( is_search() ) { $query->is_search = false; $query->query_vars[s] = false; $query->query[s] = false; // to error if ( $error == true ) $query->is_404 = true; } } add_action( 'parse_query', 'fb_filter_query' ); add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
Mình mong là với những đoạn code mà mình chia sẻ trong bài viết này sẽ giúp các bạn làm chủ và có thể học thêm kinh nghiệm về lập trình trong WordPress.
Chúc các bạn thành công !
Chuyên Mục: WordPress
Bài viết được đăng bởi webmaster