Jak wyróżnić wyszukiwane hasła bez wtyczki

15

Jak mogę wyróżnić wyszukiwane hasła bez wtyczki?

tp
źródło

Odpowiedzi:

14

Dodaj te 2 funkcje do swojego functions.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;
}

Edytować:

Aby użyć zawartości w wynikach wyszukiwania, użyj poniższej funkcji:

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

W wywołaniu pliku loop lub search.php <?php search_title_highlight(); ?>zamiast <?php the_title(); ?>i użyj <?php search_excerpt_highlight(); ?>zamiast<?php the_excerpt(); ?>

W swoim css dodaj klasę podświetlenia wyszukiwania, która podświetli wszystkie wyszukiwane słowa na żółto.

.search-highlight {
    background:#FFFF00  
    }
Chris_O
źródło
3
Zastosuj, preg_quote()aby $keyszapobiec wysadzeniu wyrażenia regularnego w przypadku znaków specjalnych, takich jak nawiasy lub nawiasy.
Geert
1
Co z wyróżnieniem wyszukiwanego hasła, gdy użytkownik kliknie singiel i przejdzie do wpisu? Następnie get_search_query () zwraca pusty ciąg znaków
Maor Barazany
1
Powinny to być filtry do the_excerpti the_contentzamiast. W każdym razie: fajna odpowiedź, ale komentarz od @Geert może być wykorzystany :)
kaiser
1
Stosuje kod <strong class = "search-highlight"> w naszym linku readmore, także jeśli ma wyszukiwane hasło, Jak możemy to rozwiązać.
1
zastępuje również tekst w readre href? jak to naprawić?
Naveen
3

Powyższe działa dobrze. Uruchomiłem podobny kod, ale powiązaj tytuł i fragment. Ale okazało się, że pęka, gdy ktoś wprowadza spację na początku lub na końcu wyszukiwanego hasła.

Więc dodałem tę linię:

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

Mam nadzieję, że to pomoże innym.

Kyzer
źródło
2

Powyższe rozwiązania powodują uszkodzenie strony, jeśli wyszukiwane hasło pojawia się w tagach HTML. Powinieneś użyć czegoś takiego:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
TAH
źródło
1
dzięki, kolego, który zrobiłeś dla mnie :-)
Agha Umair Ahmed