Como realçar os termos de pesquisa sem o plugin

14

Como posso obter os termos de pesquisa destacados sem o plug-in?

    
por t-p 01.05.2011 / 04:18

3 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">
function search_content_highlight() {
        $content = get_the_content();
        $keys = implode('|', explode(' ', get_search_query()));
        $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
.search-highlight {
    background:#FFFF00  
    }
</strong>', $content); echo '<p>' . $content . '</p>'; }
</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">
function search_excerpt_highlight() {
    $excerpt = get_the_excerpt();
    $keys = implode('|', explode(' ', get_search_query()));
    $excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
function search_content_highlight() {
        $content = get_the_content();
        $keys = implode('|', explode(' ', get_search_query()));
        $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
.search-highlight {
    background:#FFFF00  
    }
</strong>', $content); echo '<p>' . $content . '</p>'; }
</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">%pre%</strong>', $title); echo $title; }
</strong>', $title); echo $title; }

Editar:

Para usar the_content nos seus resultados de pesquisa, use a função abaixo:

%pre%

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

Em seu css, adicione a turma de destaque da pesquisa, que destacará todas as palavras pesquisadas em amarelo.

%pre%     
por Chris_O 01.05.2011 / 04:38
3

O acima funciona bem Eu corri o código semelhante, mas amarrar o título e trecho juntos. Mas foi interrompido quando alguém entrou em um espaço "" no início ou no final de um termo de consulta de pesquisa.

Então adicionei 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 ajude os outros.

    
por Kyzer 09.12.2014 / 03:20
2

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

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">
      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">%pre%</strong>', $text);
</strong>', $text);
    
por TAH 27.07.2015 / 17:47

Tags