Câu trả lời:
Thêm 2 chức năng này vào chức năng của bạn.php
function search_excerpt_highlight() {
$excerpt = get_the_excerpt();
$keys = implode('|', explode(' ', get_search_query()));
$excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $excerpt);
echo '<p>' . $excerpt . '</p>';
}
function search_title_highlight() {
$title = get_the_title();
$keys = implode('|', explode(' ', get_search_query()));
$title = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $title);
echo $title;
}
Để sử dụng the_content cho kết quả tìm kiếm của bạn, hãy sử dụng chức năng bên dưới:
function search_content_highlight() {
$content = get_the_content();
$keys = implode('|', explode(' ', get_search_query()));
$content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $content);
echo '<p>' . $content . '</p>';
}
Trong vòng lặp hoặc tệp tin.php của bạn gọi <?php search_title_highlight(); ?>
thay vì <?php the_title(); ?>
và sử dụng <?php search_excerpt_highlight(); ?>
thay vì<?php the_excerpt(); ?>
Trong css của bạn, thêm lớp đánh dấu tìm kiếm sẽ làm nổi bật tất cả các từ được tìm kiếm có màu vàng.
.search-highlight {
background:#FFFF00
}
the_excerpt
và the_content
thay vào đó. Dù sao: Câu trả lời hay, nhưng nhận xét từ @Geert có thể được thực hiện trong :)
Ở trên hoạt động tốt Tôi đã chạy mã tương tự, nhưng gắn tiêu đề và đoạn trích với nhau. Nhưng tìm thấy nó bị hỏng khi ai đó đi vào khoảng trắng "" ở đầu hoặc cuối của cụm từ truy vấn tìm kiếm.
Vì vậy, Ive thêm dòng này:
$keys = array_filter($keys);
// Add Bold to searched term
function highlight_results($text){
if(is_search() && !is_admin()){
$sr = get_query_var('s');
$keys = explode(" ",$sr);
$keys = array_filter($keys);
$text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
}
return $text;
}
add_filter('the_excerpt', 'highlight_results');
add_filter('the_title', 'highlight_results');
Hy vọng điều này chứng tỏ để giúp đỡ người khác.
Các giải pháp trên phá vỡ trang nếu thuật ngữ tìm kiếm xuất hiện bên trong các thẻ HTML. Bạn nên sử dụng một cái gì đó như:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
$text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
preg_quote()
để$keys
ngăn regex của bạn nổ tung trong trường hợp các ký tự đặc biệt như dấu ngoặc đơn hoặc dấu ngoặc.