¿Cómo puedo resaltar los términos de búsqueda sin el complemento?
¿Cómo puedo resaltar los términos de búsqueda sin el complemento?
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;
}
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%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.
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);
Lea otras preguntas en las etiquetas search