Cum să evidențiezi termenii de căutare fără plugin

1 mai 2011, 05:18:37
Vizualizări: 21.5K
Voturi: 19

Cum pot evidenția termenii de căutare fără a folosi un plugin?

0
Toate răspunsurile la întrebare 4
5
17

Adaugă aceste 2 funcții în fișierul 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;
}

Editare:

Pentru a utiliza the_content în rezultatele căutării, folosește funcția de mai jos:

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

În bucla sau fișierul search.php apelează <?php search_title_highlight(); ?> în loc de <?php the_title(); ?> și folosește <?php search_excerpt_highlight(); ?> în loc de <?php the_excerpt(); ?>

În CSS adaugă clasa search-highlight care va evidenția cu galben toate cuvintele căutate.

.search-highlight {
    background:#FFFF00  
    }
1 mai 2011 05:38:55
Comentarii

Aplică preg_quote() la $keys pentru a preveni ca expresia ta regulată să eșueze în cazul caracterelor speciale precum paranteze sau paranteze drepte.

Geert Geert
1 mai 2011 10:09:24

Acestea ar trebui să fie filtre pentru the_excerpt și the_content în loc. Oricum: Răspuns frumos, dar comentariul lui @Geert ar putea fi integrat :)

kaiser kaiser
13 oct. 2012 03:25:17

Cum rămâne cu evidențierea termenului de căutare după ce utilizatorul dă click pe un rezultat și intră în postare? Atunci get_search_query() returnează un șir gol

Maor Barazany Maor Barazany
23 mai 2011 02:47:53

Se aplică <strong class="search-highlight"> cod în linkul nostru "readmore" chiar dacă acesta conține termenul de căutare, Cum putem rezolva acest lucru.

User User
18 oct. 2012 10:20:57

înlocuiește textul din href-ul "readmore"? cum se poate repara acest lucru?

Naveen Naveen
13 ian. 2014 14:58:21
0

Funcționalitatea de mai sus funcționează bine, am rulat un cod similar, dar am legat titlul și rezumatul împreună. Totuși, am observat că se întrerupe când cineva introduce un spațiu " " fie la începutul, fie la sfârșitul unui termen de căutare.

Așadar, am adăugat această linie:

$keys = array_filter($keys);

// Adaugă Bold la termenii căutați
function highlight_results($text){
     if(is_search() && !is_admin()){
     $sr = get_query_var('s');
     $keys = explode(" ",$sr);
     <strong>$keys = array_filter($keys);</strong>
     $text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
     }
     return $text;
}
add_filter('the_excerpt', 'highlight_results');
add_filter('the_title', 'highlight_results');

Sper că acest lucru va fi de ajutor pentru alți dezvoltatori.

9 dec. 2014 04:20:22
1

Solutiile de mai sus pot strica pagina dacă termenul de căutare apare în interiorul tag-urilor HTML. Ar trebui să utilizați ceva de genul:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
27 iul. 2015 18:47:00
Comentarii

mersi frate, mi-ai făcut ziua mai bună :-)

Agha Umair Ahmed Agha Umair Ahmed
26 ian. 2016 13:56:39
0

Combină 2 răspunsuri pentru a utiliza filtre:

// Adaugă clasă termenilor căutați
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', '<span class="search-highlight">\0</span>', $text);
    }
    return $text;
}
add_filter('the_excerpt', 'highlight_results');
add_filter('the_title', 'highlight_results');

Apoi în CSS-ul tău (de exemplu):

.search-highlight {
    background: #ffff94;
    padding: 0 2px;
}
2 mar. 2020 12:35:24