Thêm Custom Post Types vào Kết Quả Tìm Kiếm WordPress
WordPress là một nền tảng CMS mạnh mẽ, cho phép bạn tạo nhiều loại nội dung khác nhau thông qua việc sử dụng Custom Post Types (CPTs). Mặc định, chức năng tìm kiếm của WordPress thường chỉ hiển thị bài viết (posts) và trang (pages) trong kết quả. Tuy nhiên, trong nhiều trường hợp, bạn muốn bao gồm cả các CPTs vào kết quả tìm kiếm để người dùng có thể dễ dàng tìm thấy nội dung mà họ cần.
Bài viết này sẽ hướng dẫn bạn các phương pháp để thêm CPTs vào kết quả tìm kiếm WordPress, giúp cải thiện trải nghiệm người dùng và tăng khả năng hiển thị nội dung của bạn.
Tại Sao Cần Thêm Custom Post Types vào Tìm Kiếm?
Việc thêm CPTs vào kết quả tìm kiếm mang lại nhiều lợi ích:
- Cải thiện trải nghiệm người dùng: Người dùng có thể tìm thấy tất cả các loại nội dung trên trang web của bạn thông qua một công cụ tìm kiếm duy nhất.
- Tăng khả năng hiển thị nội dung: Các CPTs sẽ được hiển thị trong kết quả tìm kiếm, giúp người dùng dễ dàng khám phá nội dung đa dạng trên trang web của bạn.
- Điều hướng trang web hiệu quả hơn: Tìm kiếm trở thành một phương tiện điều hướng quan trọng, giúp người dùng nhanh chóng tìm thấy thông tin họ cần.
Các Phương Pháp Thêm Custom Post Types vào Kết Quả Tìm Kiếm
Có nhiều phương pháp để thêm CPTs vào kết quả tìm kiếm WordPress, từ đơn giản đến phức tạp. Dưới đây là một số phương pháp phổ biến:
1. Sử dụng filter `pre_get_posts`
Đây là phương pháp phổ biến và hiệu quả nhất. Filter `pre_get_posts` cho phép bạn sửa đổi truy vấn chính (main query) trước khi nó được thực thi. Bạn có thể sử dụng filter này để thêm các CPTs vào mảng các loại bài viết được tìm kiếm.
Thêm đoạn code sau vào file `functions.php` của theme hoặc một plugin tùy chỉnh:
function them_custom_post_types_vao_tim_kiem( $query ) {
if ( $query->is_search() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'page', 'ten_custom_post_type_1', 'ten_custom_post_type_2' ) );
}
return $query;
}
add_filter( 'pre_get_posts', 'them_custom_post_types_vao_tim_kiem' );
Giải thích code:
- `the_custom_post_types_vao_tim_kiem`: Tên của hàm bạn định nghĩa.
- `$query`: Đối tượng truy vấn chính của WordPress.
- `$query->is_search()`: Kiểm tra xem truy vấn có phải là truy vấn tìm kiếm hay không.
- `$query->is_main_query()`: Kiểm tra xem truy vấn có phải là truy vấn chính hay không. Điều này quan trọng để tránh ảnh hưởng đến các truy vấn khác trên trang web.
- `$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘ten_custom_post_type_1’, ‘ten_custom_post_type_2’ ) );`: Thiết lập tham số `post_type` của truy vấn thành một mảng chứa các loại bài viết bạn muốn tìm kiếm. Thay thế `ten_custom_post_type_1` và `ten_custom_post_type_2` bằng tên slug của các CPTs bạn muốn thêm. Bạn có thể thêm nhiều CPTs vào mảng này.
- `add_filter( ‘pre_get_posts’, ‘the_custom_post_types_vao_tim_kiem’ );`: Thêm hàm của bạn vào filter `pre_get_posts`.
Lưu ý: Thay thế `ten_custom_post_type_1` và `ten_custom_post_type_2` bằng tên slug thực tế của CPTs bạn muốn thêm vào kết quả tìm kiếm. Bạn có thể tìm thấy tên slug của CPT trong phần khai báo của CPT đó.
2. Sử dụng plugin
Nếu bạn không muốn chỉnh sửa code trực tiếp, bạn có thể sử dụng một plugin để thêm CPTs vào kết quả tìm kiếm. Có nhiều plugin miễn phí và trả phí có thể giúp bạn thực hiện việc này.
Một số plugin phổ biến bao gồm:
- SearchWP: Một plugin tìm kiếm mạnh mẽ, cho phép bạn tùy chỉnh nhiều khía cạnh của tìm kiếm WordPress, bao gồm cả việc thêm CPTs.
- Relevanssi: Một plugin thay thế công cụ tìm kiếm mặc định của WordPress bằng một công cụ tìm kiếm mạnh mẽ hơn, với nhiều tính năng tùy chỉnh, bao gồm hỗ trợ CPTs.
- Custom Post Type Search: Một plugin đơn giản và dễ sử dụng, được thiết kế đặc biệt để thêm CPTs vào kết quả tìm kiếm.
Hướng dẫn sử dụng plugin:
- Cài đặt và kích hoạt plugin bạn chọn.
- Truy cập trang cài đặt của plugin.
- Tìm tùy chọn để thêm CPTs vào kết quả tìm kiếm.
- Chọn các CPTs bạn muốn thêm.
- Lưu cài đặt.
3. Sử dụng truy vấn SQL trực tiếp (không khuyến khích)
Phương pháp này không được khuyến khích vì nó phức tạp và có thể gây ra các vấn đề bảo mật nếu không được thực hiện đúng cách. Tuy nhiên, nó có thể hữu ích trong một số trường hợp đặc biệt.
Phương pháp này bao gồm việc sửa đổi trực tiếp truy vấn SQL được sử dụng để tìm kiếm. Điều này đòi hỏi bạn phải có kiến thức về SQL và hiểu rõ về cấu trúc cơ sở dữ liệu WordPress.
Cảnh báo: Sử dụng phương pháp này có thể làm hỏng cơ sở dữ liệu của bạn nếu bạn không cẩn thận. Hãy sao lưu cơ sở dữ liệu của bạn trước khi thực hiện bất kỳ thay đổi nào.
Ví dụ:
function sua_doi_truy_van_tim_kiem( $query ) {
global $wpdb;
if ( $query->is_search() && $query->is_main_query() ) {
$post_types = array( 'post', 'page', 'ten_custom_post_type_1', 'ten_custom_post_type_2' );
$post_types_string = "'" . implode( "', '", $post_types ) . "'";
$query->query_where = str_replace( "AND ({$wpdb->posts}.post_type = 'post')", "AND ({$wpdb->posts}.post_type IN (" . $post_types_string . "))", $query->query_where );
}
return $query;
}
add_filter( 'posts_where', 'sua_doi_truy_van_tim_kiem' );
Giải thích code:
- `sua_doi_truy_van_tim_kiem`: Tên của hàm bạn định nghĩa.
- `$query`: Đối tượng truy vấn chính của WordPress.
- `$wpdb`: Đối tượng cơ sở dữ liệu WordPress.
- `$query->is_search()`: Kiểm tra xem truy vấn có phải là truy vấn tìm kiếm hay không.
- `$query->is_main_query()`: Kiểm tra xem truy vấn có phải là truy vấn chính hay không.
- `$post_types`: Mảng chứa các loại bài viết bạn muốn tìm kiếm.
- `$post_types_string`: Chuyển đổi mảng thành một chuỗi để sử dụng trong truy vấn SQL.
- `$query->query_where`: Mệnh đề `WHERE` của truy vấn SQL.
- `str_replace(…)`: Thay thế phần của mệnh đề `WHERE` chỉ tìm kiếm bài viết (`post`) bằng một mệnh đề tìm kiếm tất cả các loại bài viết trong mảng `$post_types`.
- `add_filter( ‘posts_where’, ‘sua_doi_truy_van_tim_kiem’ );`: Thêm hàm của bạn vào filter `posts_where`.
Lưu ý: Phương pháp này phức tạp và dễ gây ra lỗi. Hãy cẩn thận và kiểm tra kỹ trước khi sử dụng.
Tối Ưu Hóa Kết Quả Tìm Kiếm
Sau khi thêm CPTs vào kết quả tìm kiếm, bạn có thể tối ưu hóa kết quả để cải thiện trải nghiệm người dùng.
- Sử dụng snippet tùy chỉnh: Bạn có thể tạo các snippet tùy chỉnh cho CPTs để hiển thị thông tin quan trọng trong kết quả tìm kiếm. Điều này giúp người dùng nhanh chóng xác định xem một kết quả có phù hợp với nhu cầu của họ hay không.
- Sắp xếp kết quả theo mức độ liên quan: Sử dụng một plugin tìm kiếm mạnh mẽ có thể giúp bạn sắp xếp kết quả tìm kiếm theo mức độ liên quan, thay vì chỉ theo ngày tháng.
- Sử dụng tính năng tìm kiếm nâng cao: Một số plugin cung cấp các tính năng tìm kiếm nâng cao, chẳng hạn như tìm kiếm theo trường tùy chỉnh hoặc tìm kiếm theo danh mục.
Kết luận
Thêm Custom Post Types vào kết quả tìm kiếm WordPress là một cách tuyệt vời để cải thiện trải nghiệm người dùng và tăng khả năng hiển thị nội dung của bạn. Bằng cách sử dụng một trong các phương pháp được trình bày trong bài viết này, bạn có thể dễ dàng tích hợp CPTs vào chức năng tìm kiếm của trang web của mình và giúp người dùng dễ dàng tìm thấy những gì họ đang tìm kiếm.
Hãy nhớ kiểm tra và tối ưu hóa kết quả tìm kiếm sau khi thêm CPTs để đảm bảo rằng người dùng có trải nghiệm tốt nhất có thể.
