Cómo mejorar la búsqueda en tu sitio web en WordPress

Scripts para mejorar la búsqueda en sitios webs con WordPress.
No es ningún secreto que la búsqueda estándar de WordPress no es perfecta. El problema es que WordPress toma su término de búsqueda solamente para parámetros internos y si tenemos campos personalizados o post types diferentes a post, la búsqueda allí no se realiza.
En este post, tenemos diez fragmentos de código de búsqueda en WordPress realmente útiles que ayudarán a mejorar la precisión de búsqueda .
Cómo siempre recomendamos, es indispensable realizar un backup de los archivos que se modifiquen para que no haya ningún problema luego.
1 – Cómo excluir publicaciones o páginas de los resultados de la búsqueda de WordPress
Si deseas poder controlar qué publicaciones o páginas deben excluirse de los resultados de búsqueda de tu página web en WordPress, todo lo que tienes que hacer es copiar y pegar el código de abajo en el archivo functions.php.
En este fragmento de código, se excluirán los post con los ID 10 y 11. Se debe editar el ID de acuerdo a las necesidades.
function SearchFilter($query) { if ($query->is_search) { $query->set('cat','10,11'); } return $query; } add_filter('pre_get_posts','SearchFilter');
2 – Búsqueda de categoría desplegable en sitios webs WordPress
Una función útil que podría dar a su búsqueda de WordPress sería permitir a tus lectores filtrar los resultados de la búsqueda por la segmentación de una categoría específica. Esto se puede lograr mediante un sencillo menú desplegable que contiene todos los títulos de categoría.
Todo lo que tienes que hacer es reemplazar el formulario de búsqueda estándar de WordPress (que se encuentra en el searchform.php generalmente en el raíz del tema) con el siguiente fragmento de código:
<form role="search" method="get" id="searchform" action="<?php bloginfo('siteurl'); ?>"> <div> <label class="screen-reader-text" for="s">Búsqueda para:</label> <input type="text" value="" name="s" id="s" /> in <?php wp_dropdown_categories( 'show_option_all=Todas las Categorías' ); ?> <input type="submit" id="searchsubmit" value="Buscar" /> </div> </form>
3 – Buscar categorías y subcategorías solamente.
Este fragmento de formulario de búsqueda podría ser útil dentro del archivo de categoría para permitir a tus lectores buscar en las categorías secundarias de cualquier categoría primaria dada.
En este fragmento de código, se buscarán todas las categorías secundarias del ID 5 (Categoría con ID 5 en WordPress) – Reemplazar $catlist.’5′; por la categoría correspondiente
<form method="get" id="searchform" action="<?php bloginfo('home'); ?> /"> <div id="search"> <input type="text" value="Buscar… " onclick="this.value=";" name="s" id="s" /> <?php $categories = get_categories('child_of=1'); $catlist = "; foreach ($categories as $cat) { $catlist.= $cat->cat_ID.','; } $catlist.'5'; ?> <input type="hidden" name="cat" value="<?php echo "$catlist"?>" /> <input name="" type="image" src="<?php bloginfo('stylesheet_directory'); ?>/styles/<?php echo "$style_path"; ?>/search.gif" value="Go" class="btn" /> </div> <!–/search –> </form>
4 – Buscar en un custom post type específico.
WordPress te da la posibilidad de buscar tipos de post específicos usando este pequeño fragmento de código. La mayoría de nuestros sitios webs tienen custom post types, por lo que esta funcionalidad es indispensable.
Todo lo que tienes que hacer es copiar y pegar el código de abajo en el archivo functions.php reemplazando portfolio por el slug de nuestro post.
function SearchFilter($query) { if ($query->is_search) { // Cambiar el post type por el de tu sitio web $query->set('post_type', 'portfolio'); } return $query; } add_filter('pre_get_posts','SearchFilter');
5 – Mostrar el número de resultados de búsqueda devueltos
Si deseas mostrar a tus lectores cuántos resultados se han encontrado por término de búsqueda, puedes utilizar este fragmento.
Abrir search.php y buscar lo siguiente:
<h2 class="pagetitle">Resultados de búsqueda</h2>
Y reemplazar por este código:
<h2 class="pagetitle">Resultados de búsqueda para <?php $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' — '); echo $count . ' '; _e('artículos'); wp_reset_query(); ?></h2>
6 – Resaltar términos de búsqueda de WordPress con jQuery
Para ayudar a que los resultados de tu búsqueda sean un poco más claros para tus lectores, puedes utilizar este fragmento de código que resaltará el término buscado dentro de los resultados.
Copia y pega el siguiente código en el archivo functions.php de tu tema:
function hls_set_query() { $query = attribute_escape(get_search_query()); if(strlen($query) > 0){ echo ' <script type="text/javascript"> var hls_query = "'.$query.'"; </script> '; } } function hls_init_jquery() { wp_enqueue_script('jquery'); } add_action('init', 'hls_init_jquery'); add_action('wp_print_scripts', 'hls_set_query');
Y luego agrega este código en tu archivo header.php, justo antes de tag /head :
<style type="text/css" media="screen"> .hls { background: #D3E18A; } </style> <script type="text/javascript"> jQuery.fn.extend({ highlight: function(search, insensitive, hls_class){ var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g"); return this.html(this.html().replace(regex, function(a, b, c){ return (a.charAt(0) == "<") ? a : "<strong class=\""+ hls_class +"\">" + c + "</strong>"; })); } }); jQuery(document).ready(function($){ if(typeof(hls_query) != 'undefined'){ $("#post-area").highlight(hls_query, 1, "hls"); } }); </script>
7 – Deshabilitar la búsqueda de WordPress
Si estas buscando una manera de deshabilitar todas las funciones de búsqueda de WordPress, podés utilizar este pequeño fragmento de código.
Todo lo que tienes que hacer es copiar y pegar el código de abajo en el archivo functions.php.
function fb_filter_query( $query, $error = true ) { if ( is_search() ) { $query->is_search = false; $query->query_vars[s] = false; $query->query[s] = false; // to error if ( $error == true ) $query->is_404 = true; } } add_action( 'parse_query', 'fb_filter_query' ); add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
8 – Haz que tus resultados de búsqueda de WordPress sean ilimitados
Este fragmento de código permite que la búsqueda devuelva resultados ilimitados.
En search.php agregar el siguiente código por encima del bucle para esta funcionalidad.
En primer lugar encontrar este código dentro de search.php:
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
Luego agregar este código:
<?php $posts=query_posts($query_string . '&posts_per_page=-1'); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?>
Con esto logramos que se muestren todos los resultados en una sola página.