Cómo resaltar los términos de búsqueda sin el complemento

14

¿Cómo puedo resaltar los términos de búsqueda sin el complemento?

    
pregunta t-p 01.05.2011 - 04:18

3 respuestas

14

Agregue estas 2 funciones a sus funciones.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 para sus resultados de búsqueda, use la siguiente función:

%pre%

En su archivo loop o search.php, llame a <?php search_title_highlight(); ?> en lugar de <?php the_title(); ?> y use <?php search_excerpt_highlight(); ?> en lugar de <?php the_excerpt(); ?>

En tu css agrega la clase de búsqueda de resaltado que resaltará todas las palabras buscadas en amarillo.

%pre%     
respondido por el Chris_O 01.05.2011 - 04:38
3

Lo anterior funciona bien. He ejecutado el código similar, pero une el título y el extracto. Pero descubrió que se rompe cuando alguien ingresa un espacio "" al principio o al final de un término de consulta de búsqueda.

Así que he añadido esta línea:

$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 esto sirva para ayudar a otros.

    
respondido por el Kyzer 09.12.2014 - 03:20
2

Las soluciones anteriores rompen la página si el término de búsqueda aparece dentro de las etiquetas HTML. Deberías 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);
    
respondido por el TAH 27.07.2015 - 17:47

Lea otras preguntas en las etiquetas