
Tại sao cần giới hạn tìm kiếm chỉ ở tiêu đề?
Mặc định WordPress tìm kiếm theo trình tự Tiêu đề, Thẻ (tags) và Nội dung bài viết. Nghĩa là khi người dùng gõ một từ khóa, WordPress sẽ quét toàn bộ nội dung trong database để tìm kết quả phù hợp. Cách này nghe có vẻ tiện lợi nhưng lại gây ra một số vấn đề không nhỏ.
Thứ nhất, kết quả tìm kiếm thường không chính xác. Ví dụ bạn có một bài viết dài 3000 chữ về SEO, trong đó từ khóa “tối ưu” xuất hiện vài chục lần ở phần nội dung nhưng tiêu đề lại nói về một chủ đề khác. Khi người dùng tìm “tối ưu”, bài viết đó sẽ lọt vào kết quả dù không thực sự liên quan. Thứ hai, việc tìm kiếm trong nội dung tiêu tốn nhiều tài nguyên server hơn, đặc biệt khi website có hàng ngàn bài viết. Giới hạn tìm kiếm chỉ ở tiêu đề sẽ giúp truy vấn nhanh hơn và kết quả chính xác hơn đáng kể.
Đối với các website có bài viết được đặt tiêu đề rõ ràng và đầy đủ từ khóa, việc chỉ search theo tiêu đề là một giải pháp hoàn hảo mà không cần cài thêm plugin nào.
Code giới hạn search theo tiêu đề bài viết
Mở file functions.php của theme đang sử dụng và thêm đoạn code sau vào cuối file:
/**
* Chi tim kiem theo tieu de bai viet (post_title)
* Hook vao posts_search voi priority cao (500)
* de ghi de lên query search mặc định
*/
function bunnywp_search_by_title_only( $search, &$wp_query ) {
global $wpdb;
// Neu chuoi search rong thi tra ve nguyen
if ( empty( $search ) ) {
return $search;
}
// Lay cac bien query hien tai
$q = $wp_query->query_vars;
// Xac dinh co tim kiem chinh xac hay tim theo khoang
$n = ! empty( $q['exact'] ) ? '' : '%';
// Xay dung cau SQL WHERE cho moi tu khoa
$search = '';
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
// Hoan thanh cau SQL neu co ket qua
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
// Loai bo bai viet co password neu chua dang nhap
if ( ! is_user_logged_in() ) {
$search .= " AND ($wpdb->posts.post_password = '') ";
}
}
return $search;
}
// Dùng priority 500 để đảm bảo ghi đè các filter khác
add_filter( 'posts_search', 'bunnywp_search_by_title_only', 500, 2 );
Giải thích chi tiết cách hoạt động:
Code này sử dụng filter posts_search, đây là nơi WordPress xây dựng câu lệnh SQL WHERE cho truy vấn tìm kiếm. Bằng cách gán priority 500 (số cao), hàm của chúng ta sẽ chạy sau các filter khác và ghi đè lên kết quả. Trong hàm, chúng ta duyệt qua từng từ khóa tìm kiếm ($q['search_terms']), tạo điều kiện SQL LIKE chỉ so sánh với cột post_title thay vì cả post_title và post_content. Biến $n quyết định tìm kiếm chính xác hay tìm kiếm theo từ chứa (ví dụ tìm “WordPress” sẽ khớp cả “Học WordPress cơ bản”).
Điều kiện kiểm tra is_user_logged_in() đảm bảo bài viết có mật khẩu bảo vệ sẽ không xuất hiện trong kết quả tìm kiếm đối với khách truy cập, đây là một biện pháp bảo mật quan trọng.
Tìm kiếm theo tiêu đề và excerpt (trích đoạn)
Nếu bạn muốn mở rộng thêm một chút, tìm kiếm cả tiêu đề lẫn phần trích đoạn (excerpt) thay vì toàn bộ nội dung, có thể sửa đổi code trên như sau:
function bunnywp_search_title_and_excerpt( $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 LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_excerpt LIKE '{$n}{$term}{$n}'))";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() ) {
$search .= " AND ($wpdb->posts.post_password = '') ";
}
}
return $search;
}
add_filter( 'posts_search', 'bunnywp_search_title_and_excerpt', 500, 2 );
Với cách này, truy vấn SQL sẽ tìm trong cả cột post_title và post_excerpt, giúp thu hẹp phạm vi so với search toàn bộ nội dung nhưng vẫn cho kết quả phong phú hơn so với chỉ search tiêu đề.
Mẹo tối ưu khi giới hạn search theo tiêu đề
1. Viết tiêu đề bài viết chuẩn SEO: Khi bạn giới hạn search theo tiêu đề, tiêu đề bài viết trở nên quan trọng hơn bao giờ hết. Hãy đảm bảo mỗi tiêu đề chứa từ khóa chính mà người dùng có thể tìm kiếm. Viết tiêu đề rõ ràng, mô tả chính xác nội dung bài viết, tránh tiêu đề chung chung như “Lưu ý quan trọng” hay “Cập nhật mới”.
2. Sử dụng search form có placeholder gợi ý: Thêm placeholder vào ô tìm kiếm để hướng dẫn người dùng nhập từ khóa ngắn gọn, ví dụ “Tìm theo từ khóa…” thay vì gõ cả câu hỏi dài. Điều này giúp kết quả search theo tiêu đề hiệu quả hơn.
3. Hiển thị số kết quả: Khi giới hạn search, số kết quả có thể ít hơn trước. Hãy hiển thị số lượng kết quả tìm được để người dùng biết và có thể điều chỉnh từ khóa.
Các plugin thay thế nếu bạn không muốn dùng code
Nếu bạn không muốn can thiệp vào code, có một số plugin miễn phí giúp kiểm soát phạm vi tìm kiếm:
– SearchWP: Plugin tìm kiếm cao cấp, cho phép cấu hình chính xác weights cho tiêu đề, nội dung, excerpt, taxonomy. Phiên bản miễn phí giới hạn 500 posts. Phù hợp với website có yêu cầu tìm kiếm phức tạp.
– WP Search Filters: Plugin miễn phí cho phép loại bỏ hoặc giới hạn post types khỏi kết quả tìm kiếm. Giao diện đơn giản, dễ sử dụng cho người mới bắt đầu.
– Relevanssi: Plugin miễn phí nổi bật với khả năng thay thế hoàn toàn bộ search mặc định của WordPress. Bạn có thể thiết lập tìm kiếm chỉ trong tiêu đề, thêm trọng số cho từng trường, và nhiều tùy chọn nâng cao khác.
Vấn đề thường gặp và cách khắc phục
Không tìm được kết quả dù tiêu đề có từ khóa: Hãy kiểm tra xem website có đang bật cache không. Một số cache plugin như WP Rocket, LiteSpeed Cache có thể lưu kết quả search cũ. Hãy xóa cache rồi thử lại. Ngoài ra, kiểm tra xem từ khóa có chứa ký tự đặc biệt không, vì hàm esc_sql() có thể escape một số ký tự.
Code gây lỗi trắng trang: Điều này thường xảy ra khi copy code bị lỗi ký tự (như dấu ngoặc kép thông minh). Hãy đảm bảo dùng dấu nháy đơn ' hoặc dấu ngoặc kép thẳng " trong code PHP, không dùng dấu ngoặc kép cong từ trình soạn thảo văn bản.
Xung đột với plugin SEO: Một số plugin SEO như Yoast SEO hoặc Rank Math có thể thêm filter riêng vào posts_search. Nếu code không hoạt động, hãy thử tăng priority lên 999 hoặc tắt tạm các plugin SEO để kiểm tra.
Tổng kết
Giới hạn tìm kiếm WordPress chỉ ở tiêu đề bài viết là một kỹ thuật đơn giản nhưng hiệu quả. Nó giúp kết quả chính xác hơn, tốc độ truy vấn nhanh hơn và giảm tải cho server. Đoạn code chỉ cần thêm vào functions.php là hoạt động ngay mà không cần cài thêm plugin. Bạn có thể tùy chỉnh thêm để tìm theo tiêu đề kết hợp excerpt, hoặc sử dụng các plugin thay thế nếu thích giao diện cấu hình trực quan.
Xem thêm: Cho phép search page trong WordPress không sử dụng Plugin hoặc Tăng cường độ chính xác tìm kiếm cho WordPress.
Blog này vốn là góc cá nhân ghi chép kinh nghiệm WordPress, không phải tài liệu từ dân chuyên làm web. Nên nếu bạn đang cần một website chuẩn chỉnh, bên hỗ trợ mình quen làm nhanh và ổn định hơn tự làm – đơn vị tên TaigaWeb.
