Crear Buscador de WordPress Personalizado

El buscador de WordPress funciona correctamente en los casos típicos, sin embargo, muchas veces podríamos necesitar personalizar su funcionamiento para cumplir con necesidades específicas de nuestro proyecto, por ejemplo, podríamos querer limitar la búsqueda a solamente entradas o por qué no a un tipo de contenido personalizado que hayamos creado anteriormente.

[wp_ad_camp_1]

En este artículo veremos lo fácil que es crear tu propio buscador de WordPress y entenderemos mucho mejor cómo funcionan las búsquedas en este CMS.

Bases para crear tu propio Buscador de WordPress

Detrás del buscador de WordPress está la clase WP_Query, esta clase cuenta con varios parámetros, muchos de los cuales pueden ser especificados en un formulario de búsqueda o directamente en una URL para de esta forma cambiar el comportamiento de la búsqueda. Por ejemplo, si queremos limitar una búsqueda a un tipo de contenido personalizado llamada videojuego:

http://castitec.com/?s=mario+bros&post_type=videojuego

Cabe recordar que lo único necesario para que exista una búsqueda en WordPress es que el parámetro s esté incluido en el enlace, como en nuestro ejemplo anterior, el valor de este parámetro será precisamente la palabra clave que vamos a buscar. Adicionalmente hay otros parámetros muy útiles que nos ayudarán a darle a nuestra búsqueda el comportamiento que deseamos.

Cláusula WHERE

Por defecto WordPress realiza las búsquedas por palabra clave, lo que significa que cuando pasamos la palabra clave Mario Bros, WordPress realiza la siguiente cláusula WHERE.

((wp_posts.post_title LIKE '%mario%') OR
(wp_posts.post_content LIKE '%mario%')) 
AND
((wp_posts.post_title LIKE '%bros%') OR
(wp_posts.post_content LIKE '%bros%'))

Buscar por Frase

Como puedes ver en la cláusula WHERE mostrada anteriormente, no se está buscando por la frase completa sino por mario en el título o en contenido y bros en el título o en el contenido. De esta forma una entrada que tenga bros en el título y mario en el contenido va a retornar como resultado de esta búsqueda, cosa que posiblemente no quieras hacer ya que lo más común es que quieras buscar por entradas que contengan la frase mario bros.

Esto lo puedes realizar de una forma muy sencilla añadiendo sentence=1 en el enlace de tu búsqueda:

http://castitec.com/?s=mario+bros&sentence=1&post_type=videojuego

La cláusula WHERE usando sentence=1 quedaría de la siguiente forma.

((wp_posts.post_title LIKE '%mario bros%') OR 
(wp_posts.post_content LIKE '%mario bros%'))

Buscar por Coincidencia Exacta

Algo muy similar a la búsqueda por frase sería la búsqueda exacta. Para realizar una búsqueda exacta se añade exact=1 en la URL de tu búsqueda:

http://castitec.com/?s=mario+bros&exact=1&post_type=videojuego

En esta caso la cláusula WHERE quedaría de la siguiente forma si usamos exact=1.

((wp_posts.post_title LIKE 'mario bros') OR 
(wp_posts.post_content LIKE 'mario bros'))

Como lo puedes notar la única diferencia es que se remueven los signos % que anteceden y suceden a la palabra clave. Aunque la diferencia sea pequeña la connotación es muy importante, en este caso el título el contenido tiene que ser exactamente el mismo que en la palabra clave, mientras que en el anterior caso la palabra clave tan solo tenía que estar contenida en el título o en el contenido.

Este tipo de búsqueda es muy poco usada debido a que si no hay elementos que contengan exactamente la palabra clave no se mostrarán resultados, situación que es muy probable que suceda.

Personalizar un Formulario de Búsqueda

El formulario de búsqueda por defecto de WordPress luce de la siguiente forma:

<form role="search" method="get" id="searchform" class="searchform" action="http://castitec.com/">
<div>
<input type="text" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

Si queremos cambiar el comportamiento de la búsqueda debemos añadir nuestros propios parámetros al formulario.

<form role="search" method="get" id="searchform" action="http://castitec.com/">
<div>
<input type="text" value="" name="s" id="s" />
<input type="hidden" value="1" name="sentence" />
<input type="hidden" value="videojuego" name="post_type" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>

Cuando este formulario de búsqueda sea utilizado generará este enlace.

http://castitec.com/?s={palabra+clave}&sentence=1&post_type=videojuego

La página de resultados que se mostrará seguirá siendo la misma, pero los resultados serán solamente del tipo de contenido personalizado llamado videojuego que contengan la palabra clave en el título en el contenido.

Y así podremos dar nuestros primeros pasos en la personalización y el manejo de búsquedas en WordPress, espero que esta información haya sido de ayuda, cualquier sugerencia o recomendación es siempre bienvenida.