Todos sabemos que la función de búsqueda predeterminada de WordPress no es muy buena o al menos no es tan buena como la de Google 🙂, pero existen algunos trucos para ayudar a mejorar los resultados de búsqueda. Esta publicación le mostrará diferentes métodos para limitar sus resultados de búsqueda a tipos o categorías de publicaciones específicas y cómo cambiar el número predeterminado o los resultados de búsqueda por página.
Limite los resultados de búsqueda de WordPress por categoría
Aquí hay algunos métodos que puede usar para limitar sus resultados de búsqueda por categoría que pueden ser muy útiles para sitios como Themelocal.com que tiene secciones como temas, complementos y el blog.
1. Usar un campo de entrada oculto en tu formulario de búsqueda.php
Este es el método que uso actualmente en Themelocal.com, por lo que cuando las personas buscan en el sitio principal, solo obtendrán resultados de búsqueda de la categoría «Temas de WordPress». Todo lo que necesita hacer es agregar una entrada oculta a su formulario de búsqueda.php con una identificación de «gato» y la identificación de categoría para el valor.
Un formulario de búsqueda básico.php
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<input type="text" size="16" name="s" value="Search" />
<input type="submit" value="Go" />
</form>
Agregue lo siguiente para limitar a la categoría con una ID de 5
<input type="hidden" name="cat" id="cat" value="5" />
Código completo
<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<input type="hidden" name="cat" id="cat" value="5" />
<input type="text" size="16" name="s" value="Search" />
<input type="submit" value="Go" />
</form>
2. Agregar una declaración de consulta a su archivo Search.php
Otro método útil para limitar los resultados de búsqueda a categorías específicas es agregar una consulta a su archivo search.php justo antes de la instrucción if.
Incluyendo categorías a la búsqueda
Al usar ID positivos en la consulta, puede definir qué categorías desea mostrar en sus resultados de búsqueda (mostrar categorías con ID 1, 2 y 3).
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=1,2,3" );
?>
Exclusión de categorías de la búsqueda
Alternativamente, puede usar identificaciones negativas para excluir ciertas categorías de su página de búsqueda (excluir la categoría con una identificación de 7)
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=-7" );
?>
Excluir páginas de su página de búsqueda
A continuación, se muestran algunas formas de limitar los resultados de búsqueda para excluir páginas de los resultados y mostrar solo publicaciones.
Usando una función
Simplemente inserte la siguiente función en su archivo functions.php
// Remove pages from search results
function exclude_pages_from_search( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'post_type', 'post' );
}
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );
Usando un condicional en su archivo Search.php
Otra forma de eliminar páginas de su archivo search.php es insertar un condicional en su archivo search.php justo después de “while (have_posts())”. Esto no se recomienda si está utilizando un tema de terceros porque si actualiza el tema en el futuro perderá sus ediciones, si es su propio tema personalizado, entonces está bien.
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
// Exclude pages from the loop.
if ( is_search() && ( $post->post_type=='page' ) ) {
continue;
}
?>
Excluir una página o páginas específicas
También puede excluir publicaciones/páginas específicas de sus páginas de resultados de búsqueda en sus ID usando el siguiente código agregado en el archivo functions.php. Simplemente modifique la matriz de ID para incluir las ID de las páginas o publicaciones que desea excluir.
// Exclude specific posts/pages from search
function myprefix_exclude_pages_from_search( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$exclude_ids = array( 7, 19 , 21 ); // Array of the ID's to exclude
$query->set( 'post__not_in', $exclude_ids );
}
}
add_filter( 'pre_get_posts', 'myprefix_exclude_pages_from_search' );
Limitar la búsqueda al tipo de publicación
Una de las razones para usar Tipos de puerto en WordPress es porque no los quiere en su fuente o bucle principal de wp, es por eso que son perfectos para cosas como controles deslizantes, testimonios, servicios, etc. Sin embargo, es posible que sus publicaciones personalizadas sigan apareciendo en su página de resultados de búsqueda.
1. Excluir un tipo de publicación personalizada de los resultados de búsqueda
Todo lo que tiene que hacer para excluir publicaciones personalizadas de los resultados de búsqueda es establecer el siguiente argumento al definir su publicación personalizada (más información):
'exclude_from_search' => true
2. Uso de un campo oculto en el formulario de búsqueda para mostrar solo publicaciones de un tipo específico de publicación personalizada
Alternativamente, puede usar un campo oculto en su formulario de búsqueda de la misma manera que lo hizo para limitar las categorías si desea configurar un formulario de búsqueda avanzada que solo buscará a través del tipo de publicación personalizada especificada.
<input type="hidden" name="post_type" value="portfolio" />
Este campo adicional iría dentro de su formulario de búsqueda y simplemente reemplazaría donde dice «cartera» con su propio nombre de tipo de publicación personalizado. Este método es excelente si tiene una determinada sección en su sitio que utiliza tipos de publicaciones personalizadas y desea que los usuarios puedan buscar solo en esas publicaciones específicas.
Cambiar el número de resultados por página
Por defecto, WordPress usa el número definido en Ajustes > Lectura (las páginas de blog muestran como máximo…) para definir cuántos resultados aparecen en la página de resultados de búsqueda. Si desea mostrar más, menos o infinitos resultados en su página de búsqueda, puede hacerlo utilizando el siguiente código:
// Alter search posts per page
function myprefix_search_posts_per_page( $query) {
if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
$query->set( 'posts_per_page', '10' );
}
}
add_filter( 'pre_get_posts', 'myprefix_search_posts_per_page' );
Este código iría en su archivo functions.php. Preferiblemente en su tema hijo si trabaja con un tema de otro desarrollador. El código establecerá sus resultados de búsqueda en «10» por página. Puedes cambiar el número a lo que quieras. Para hacer que sus resultados de búsqueda sean de uso ilimitado -1. O utilice un complemento como Búsqueda de conjunto de herramientas para agregar paginación a sus resultados.
Búsqueda avanzada/mejor
WordPress busca de forma predeterminada en función de cualquier contenido dentro de sus publicaciones y páginas. Sería posible modificar la forma en que funciona la búsqueda a través de funciones, pero es bastante complejo, por lo que si desea modificar la forma en que realmente funciona la búsqueda (lo que busca), puede considerar usar un complemento como el Búsqueda extendida de WP enchufar. Haga clic en el banner a continuación para comprobarlo o búsquelo en su panel de WordPress en Complementos > Agregar nuevo.
Este complemento le permitirá controlar mejor la búsqueda predeterminada si desea buscar por meta, categorías, etiquetas, términos, título, etc. ¡Puede incluir o excluir ciertos tipos de publicaciones de la búsqueda, excluir publicaciones que son más antiguas que una fecha específica, modificar la cantidad de elementos que se muestran en los resultados de búsqueda y más!