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

15

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

tp
fuente

Respuestas:

14

Agregue estas 2 funciones a sus 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;
}

Editar:

Para usar the_content para sus resultados de búsqueda, use la siguiente función:

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

En su bucle o busque el archivo search.php en <?php search_title_highlight(); ?>lugar de <?php the_title(); ?>y use en <?php search_excerpt_highlight(); ?>lugar de<?php the_excerpt(); ?>

En su CSS, agregue la clase de resaltado de búsqueda que resaltará todas las palabras buscadas en amarillo.

.search-highlight {
    background:#FFFF00  
    }
Chris_O
fuente
3
Solicite preg_quote()para $keysevitar que su expresión regular explote en caso de caracteres especiales como paréntesis o corchetes.
Geert
1
¿Qué hay de resaltar el término de búsqueda después de que el usuario hace clic en el sencillo y entra en la publicación? Luego, get_search_query () devuelve una cadena vacía
Maor Barazany
1
Esos deberían ser filtros para the_excerpty en su the_contentlugar. De todos modos: buena respuesta, pero el comentario de @Geert podría funcionar :)
kaiser
1
Aplica el código <strong class = "search-highlight"> en nuestro enlace readmore también si tiene un término de búsqueda, ¿Cómo podemos resolver eso?
1
¿está reemplazando el texto en readmore href también? ¿Cómo arreglar esto?
Naveen
3

Lo anterior funciona bien. Ejecuté un código similar, pero uní 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 agregué 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 pruebe ayudar a otros.

Kyzer
fuente
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">\0</strong>', $text);
TAH
fuente
1
gracias compañero que me alegraste el día :-)
Agha Umair Ahmed