Como destacar termos de pesquisa sem plug-in

15

Como destacar os termos de pesquisa sem o plug-in?

tp
fonte

Respostas:

14

Adicione estas 2 funções às suas funções.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;
}

Editar:

Para usar o conteúdo para os resultados da pesquisa, use a função abaixo:

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

No seu loop ou no arquivo search.php, chame em <?php search_title_highlight(); ?>vez de <?php the_title(); ?>e use em <?php search_excerpt_highlight(); ?>vez de<?php the_excerpt(); ?>

No seu css, adicione a classe de destaque de pesquisa, que destacará todas as palavras pesquisadas em amarelo.

.search-highlight {
    background:#FFFF00  
    }
Chris_O
fonte
3
Aplique preg_quote()para $keysevitar que seu regex seja explodido no caso de caracteres especiais, como parênteses ou colchetes.
Geert
1
Que tal destacar o termo de pesquisa depois que o usuário clica no single e entra na postagem? Em seguida, o get_search_query () retorna uma string vazia
Maor Barazany
1
Esses devem ser filtros para the_excerpte em the_contentvez disso. Enfim: resposta de Nice, mas o comentário de @Geert poderia ser trabalhado em :)
kaiser
1
Aplica o código <strong class = "search-realce"> no nosso link readmore também se tiver um termo de pesquisa. Como podemos resolver isso.
1
está substituindo o texto no readmore href também? Como consertar isto?
Naveen
3

O exemplo acima funciona bem. Eu executei o código semelhante, mas amarre o título e o trecho. Mas constatou quebras quando alguém entra em um espaço "" no início ou no final de um termo de consulta de pesquisa.

Então, eu adiciono esta linha:

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

Espero que isso prove ajudar os outros.

Kyzer
fonte
2

As soluções acima quebram a página se o termo de pesquisa aparecer dentro das tags HTML. Você deve usar algo como:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
TAH
fonte
1
thanxs acasalar você fez o meu dia :-)
Agha Umair Ahmed