Trabajando en uno de mis últimos proyectos para la multinacional Azúcar Manuelita y su página de industria (todo realizado en WordPress) siempre me encuentro con detalles que son agregados en WordPress por defecto.
En este caso me encuentro con el caso de las búsquedas las cuales en WordPress funcionan globalmente lo que quiere decir que cuando se realiza una tratará de extraer todo el contenido relacionado con dicha búsqueda lo que incluye (páginas, entradas, comentarios, categorías, etc).
Como pueden ver en la imagen siguiente el termino de búsqueda me esta devolviendo resultados no solo de las entradas (posts) si no que en este caso también de algunas páginas que incluyen ya sea en su titulo, contenido y demás la palabra “manuelita”.
Ahora bien, en mi caso no requiero que mis búsquedas sean de forma global en toda la página, ya que solo necesito que siempre los resultados que aparezcan sean de las entradas o posts en este caso.
¿Como lo hice?
Dentro de WordPress existe un filtro llamado pre_get_posts el cual “proporciona acceso al objeto $query por referencia (cualquier cambio que realice en el $query se realiza directamente en el objeto original y no es necesario ningún valor de retorno)”.
De esta manera podemos limitar nuestras búsquedas de la siguiente manera (Agregar al functions.php)
// Limitar las búsquedas solo para los posts function limit_search_posts($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','limit_search_posts');
Esta fue la forma mas fácil que pude realizar, pero la pueden implementar de la forma que ustedes consideren.
El resultado
Ahora al momento de volver a realizar la misma búsqueda seguramente el problema estará resuelto como se muestra a continuación:
Y ahora solo nos mostrara resultados de nuestras entradas (posts).
Puedes ingresar al desarrollo directamente por medio de http://andres-dev.com/manuelita-industria/category/noticias/ y revisarlo directamente.
Y si este artículo te ha gustado no olvides compartirlo con todos.