Giới hạn kết quả tìm kiếm theo post types WordPress
Giới hạn kết quả tìm kiếm theo Post Types WordPress: Hướng dẫn toàn diện
WordPress, một nền tảng quản lý nội dung (CMS) mạnh mẽ và linh hoạt, cung cấp nhiều tính năng cho phép người dùng tạo và quản lý các loại nội dung khác nhau. Bên cạnh các bài viết (posts) và trang (pages) mặc định, WordPress cho phép bạn tạo các post types tùy chỉnh để đáp ứng nhu cầu cụ thể của trang web. Tuy nhiên, đôi khi bạn có thể muốn giới hạn kết quả tìm kiếm để chỉ hiển thị một số post types nhất định. Bài viết này sẽ hướng dẫn bạn cách thực hiện việc này một cách hiệu quả.
Tại sao cần giới hạn kết quả tìm kiếm theo Post Types?
Việc giới hạn kết quả tìm kiếm theo post types có thể mang lại nhiều lợi ích, bao gồm:
- Cải thiện trải nghiệm người dùng: Bằng cách chỉ hiển thị các loại nội dung liên quan đến truy vấn tìm kiếm, bạn có thể giúp người dùng tìm thấy thông tin họ cần một cách nhanh chóng và dễ dàng hơn.
- Tăng tính chính xác của kết quả tìm kiếm: Loại bỏ các post types không liên quan khỏi kết quả tìm kiếm giúp giảm thiểu “tiếng ồn” và cải thiện độ chính xác của kết quả.
- Tùy chỉnh trải nghiệm tìm kiếm: Bạn có thể tùy chỉnh cách tìm kiếm hoạt động trên trang web của mình bằng cách cho phép người dùng lựa chọn các post types mà họ muốn tìm kiếm.
Các phương pháp giới hạn kết quả tìm kiếm theo Post Types
Có nhiều phương pháp khác nhau để giới hạn kết quả tìm kiếm theo post types trong WordPress, từ việc sử dụng các hook mặc định của WordPress đến việc sử dụng các plugin chuyên dụng. Chúng ta sẽ xem xét một số phương pháp phổ biến nhất.
Sử dụng pre_get_posts hook
pre_get_posts là một hook mạnh mẽ cho phép bạn sửa đổi truy vấn chính trước khi nó được thực thi. Bạn có thể sử dụng hook này để thay đổi post types được tìm kiếm.
Để sử dụng pre_get_posts, bạn cần thêm một đoạn code vào file functions.php của theme bạn đang sử dụng (hoặc tốt hơn là một plugin tùy chỉnh để tránh mất các tùy chỉnh khi cập nhật theme).
Ví dụ, đoạn code sau sẽ giới hạn kết quả tìm kiếm chỉ hiển thị các bài viết (posts) và trang (pages):
“`php
function modify_search_query( $query ) {
if ( $query->is_search() && !is_admin() ) {
$query->set( ‘post_type’, array( ‘post’, ‘page’ ) );
}
}
add_action( ‘pre_get_posts’, ‘modify_search_query’ );
“`
Giải thích đoạn code:
- Hàm modify_search_query được tạo ra để sửa đổi truy vấn.
- Hàm này được gắn vào hook pre_get_posts bằng hàm add_action.
- Câu lệnh if kiểm tra xem truy vấn hiện tại có phải là tìm kiếm ($query->is_search()) và không phải là trong khu vực quản trị (!is_admin()) hay không. Điều này để đảm bảo rằng chúng ta chỉ sửa đổi truy vấn tìm kiếm công khai và không ảnh hưởng đến các truy vấn trong khu vực quản trị.
- Hàm $query->set( ‘post_type’, array( ‘post’, ‘page’ ) ) đặt post type cho truy vấn thành một mảng chứa ‘post’ và ‘page’. Điều này có nghĩa là kết quả tìm kiếm sẽ chỉ hiển thị các bài viết và trang.
Để thay đổi các post types được tìm kiếm, bạn chỉ cần thay đổi mảng array( ‘post’, ‘page’ ) thành danh sách các post types bạn muốn hiển thị.
Sử dụng Search Filter
Một cách tiếp cận khác là sử dụng class SearchFilter. Class này cho phép bạn thêm một bộ lọc vào trang tìm kiếm, cho phép người dùng chọn các post types mà họ muốn tìm kiếm.
Để sử dụng phương pháp này, bạn cần tạo một plugin tùy chỉnh hoặc thêm code vào file functions.php của theme.
Ví dụ, code sau sẽ tạo một bộ lọc tìm kiếm cho phép người dùng chọn các post types mà họ muốn tìm kiếm:
“`php
function add_post_type_filter( $query ) {
if ( is_search() ) {
$post_types = get_post_types( array( ‘public’ => true ) );
?>
<form action="” method=”get”>
Tất cả
<?php
foreach ( $post_types as $post_type ) {
$selected = ( isset( $_GET['post_type_filter'] ) && $_GET['post_type_filter'] == $post_type ) ? 'selected' : '';
echo '’ . esc_html( get_post_type_object( $post_type )->labels->singular_name ) . ”;
}
?>
<input type="hidden" name="s" value="” />
set( ‘post_type’, $_GET[‘post_type_filter’] );
}
}
return $query;
}
add_filter( ‘pre_get_posts’, ‘add_post_type_filter’ );
“`
Giải thích đoạn code:
- Hàm add_post_type_filter được tạo ra để thêm bộ lọc post type vào trang tìm kiếm.
- Hàm này được gắn vào hook pre_get_posts.
- Code kiểm tra xem có phải trang tìm kiếm không (is_search()).
- Hàm get_post_types( array( ‘public’ => true ) ) lấy tất cả các post types công khai.
- Một form HTML được tạo ra để cho phép người dùng chọn post type. Form này bao gồm một select element với các tùy chọn cho mỗi post type.
- Nếu người dùng đã chọn một post type, truy vấn được sửa đổi để chỉ hiển thị post type đã chọn.
Bạn cần thêm đoạn code này vào file search.php của theme để hiển thị form bộ lọc trên trang tìm kiếm.
Sử dụng Plugin
Nếu bạn không muốn viết code, bạn có thể sử dụng một plugin để giới hạn kết quả tìm kiếm theo post types. Có nhiều plugin miễn phí và trả phí có sẵn trên WordPress Plugin Directory, chẳng hạn như “SearchWP” hoặc “Relevanssi”. Các plugin này thường cung cấp giao diện người dùng thân thiện để bạn có thể dễ dàng cấu hình các tùy chọn tìm kiếm.
Lựa chọn phương pháp phù hợp
Phương pháp nào là phù hợp nhất cho bạn sẽ phụ thuộc vào nhu cầu cụ thể của bạn và mức độ thoải mái của bạn khi làm việc với code.
- Nếu bạn chỉ cần giới hạn kết quả tìm kiếm cho một số post types cụ thể và không cần tùy chỉnh nâng cao, việc sử dụng hook pre_get_posts là một lựa chọn đơn giản và hiệu quả.
- Nếu bạn muốn cho phép người dùng chọn các post types mà họ muốn tìm kiếm, việc sử dụng SearchFilter sẽ là một lựa chọn tốt hơn.
- Nếu bạn không muốn viết code hoặc cần các tùy chọn tìm kiếm nâng cao, việc sử dụng một plugin là lựa chọn tốt nhất.
Kết luận
Giới hạn kết quả tìm kiếm theo post types là một cách hiệu quả để cải thiện trải nghiệm người dùng và tăng tính chính xác của kết quả tìm kiếm trên trang web WordPress của bạn. Bằng cách sử dụng một trong các phương pháp được mô tả trong bài viết này, bạn có thể dễ dàng tùy chỉnh cách tìm kiếm hoạt động trên trang web của mình để đáp ứng nhu cầu cụ thể của bạn.
- Chống spam form liên hệ WordPress 9 cách
- Cách xóa version number WordPress đúng cách
- Thêm link “Read More” vào text copied WordPress
- Thay đổi số bài viết trang blog WordPress
- Thêm blogroll WordPress không cần plugin
- 3 cách thêm đường kẻ ngang trong WordPress
- Sử dụng nhiều search forms trong WordPress
