Cách làm nổi bật cụm từ tìm kiếm mà không cần plugin


15

Làm cách nào tôi có thể nhận được các cụm từ tìm kiếm được tô sáng mà không cần plugin?

Câu trả lời:


14

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;
}

Biên tập:

Để 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  
    }

3
Áp dụng preg_quote()để $keysngă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.
Geert

1
Điều gì về việc làm nổi bật cụm từ tìm kiếm sau khi người dùng nhấp vào đĩa đơn và đi vào bên trong bài viết? Sau đó, get_search_query () trả về một chuỗi rỗng
Maor Barazany

1
Chúng nên được lọc the_excerptthe_contentthay 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 :)
kaiser

1
Nó cũng áp dụng mã <strong class = "search-highlight"> trong liên kết readmore của chúng tôi nếu nó có cụm từ tìm kiếm, Làm thế nào chúng ta có thể giải quyết điều đó.

1
nó cũng thay thế văn bản trong readmore href? Làm thế nào để khắc phục điều này?
Naveen

3

Ở 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.


2

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);

1
soxs mate bạn đã thực hiện ngày của tôi :-)
Agha Umair Ahmed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.