Tutoriales de WordPress de Confianza, cuando más los necesitas.
Guía para Principiantes de WordPress
Copa WPB
25 Millones+
Sitios web que usan nuestros plugins
16+
Años de experiencia en WordPress
3000+
Tutoriales de WordPress de expertos

Cómo limitar los resultados de búsqueda para tipos de publicaciones específicos en WordPress

¿Alguna vez te has preguntado cómo puedes limitar tus resultados de búsqueda a tipos de publicación específicos? No es muy difícil. Ya te hemos mostrado cómo deshabilitar la función de búsqueda en WordPress modificando el archivo functions.php. Ahora vamos a hacer lo mismo, excepto para filtrar nuestros resultados de búsqueda.

Abre tu archivo functions.php y agrega los siguientes códigos:

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('post','page'));
    }

return $query;
}

add_filter('pre_get_posts','searchfilter');

Nota la línea que dice

$query->set('post_type',array('post','page'));

Puedes filtrar los resultados de búsqueda cambiando los valores en la variable de matriz. Ahora está configurado para mostrar publicaciones y páginas, pero puedes modificarlo para mostrar lo que quieras.

Descargo de responsabilidad: Nuestro contenido es compatible con el lector. Esto significa que si haces clic en algunos de nuestros enlaces, podemos ganar una comisión. Consulta cómo se financia WPBeginner, por qué es importante y cómo puedes apoyarnos. Aquí está nuestro proceso editorial.

El Kit de herramientas definitivo para WordPress

Obtén acceso GRATUITO a nuestro kit de herramientas: ¡una colección de productos y recursos relacionados con WordPress que todo profesional debería tener!

Interacciones del lector

26 CommentsLeave a Reply

  1. Gracias por este código, funcionó, ¡aunque lo actualizaste por última vez en 2013! Mi tema también usa Búsqueda Instantánea y me gustaría limitar los resultados allí también. ¿Cómo podría hacerlo?

  2. Mi tema actual muestra publicaciones con algunas líneas iniciales para el término/palabra buscada. Quiero personalizarlo para mostrar ese párrafo que contiene el término/palabra buscada en el extracto de la publicación. En otras palabras, quiero mostrar texto relacionado en el extracto de la publicación, no el párrafo inicial en los resultados de búsqueda. ¿Alguien puede ayudarme con esto...?

  3. Tengo una función sencilla en el archivo functions.php de mi tema, que solo debería filtrar las Publicaciones por un término de búsqueda... cuando busco algo ahora, aparece el Error HTTP 500 "El sitio web no puede mostrar la página". ¿Alguien tiene una idea de qué está mal con mi función?

    function searchFilter($query) { if ($query->is_search) { wp_reset_query(); $args = array ( ‘s’ => $_GET[‘s’] ); query_posts( $args ); } } add_filter(‘pre_get_posts’, ‘searchFilter’);

  4. Esto está restringiendo todos los formularios de búsqueda al tipo de publicación personalizado, incluido mi formulario de búsqueda en la barra lateral, que necesita devolver todos los resultados. Esto me funciona:

    function searchfilter($query) { if ($query->is_search && !is_admin() ) { if(isset($_GET[‘post_type’])) { $type = $_GET[‘post_type’]; if($type == ‘book’) { $query->set(‘post_type’,array(‘book’)); } } } return $query; } add_filter(‘pre_get_posts’,’searchfilter’);

    • Gracias por la ayuda, mejoré tu código para que la gente solo pueda buscar tipos de publicación permitidos.

      function searchfilter($query) { if ($query->is_search && !is_admin() ) { if(isset($_GET[‘post_type’])) { $types = (array) $_GET[‘post_type’]; $allowed_types = get_post_types(array(‘public’ => true, ‘exclude_from_search’ => false)); foreach($types as $type) { if( in_array( $type, $allowed_types ) ) { $filter_type[] = $type; } } if(count($filter_type)) { $query->set(‘post_type’,$filter_type); } } } } add_filter(‘pre_get_posts’,’searchfilter’);

      • ¿Cómo se implementa esto? Si estoy leyendo correctamente el comentario de Greg, queremos un solo formulario que esté limitado a un tipo de publicación, mientras mantenemos la búsqueda predeterminada intacta para otras áreas del sitio.

        Lo pregunto porque un sitio en el que estoy trabajando necesita una "Biblioteca de Recursos" que se pueda buscar, la cual me gustaría desarrollar sin comprometer la funcionalidad de búsqueda normal.

  5. Hola,

    No puedo restringir páginas en el filtro de búsqueda.
    Solo necesito la búsqueda dentro de las publicaciones y no de las páginas.

    $query->set(‘post_type’,array(‘post’));
    Esto también muestra páginas.

  6. Usé este código para restringir mis resultados de búsqueda a Páginas, no a Publicaciones. Funcionó en ese sentido, sin embargo, parece que solo busca los nombres de las páginas en lugar del contenido. Por ejemplo, si un usuario busca "precios", la página de Precios será un resultado, pero si buscan "precio" o "costo" (ambas palabras que están en la página de precios), no se encuentra nada. ¿Me falta algún fragmento de código?

  7. Hi,
    I have a question and I couldn’t get a solution since last month.
    I have lost of categories, pages and re-directions in my blog so my search box finds many unnecessary results when you try to search something. I want to customize my search.php for only categories part. In other words, we you search something, the results should be only from categories sections. So I will be get rid of redundant & duplicated results. My current codes are as below…Please help me :)

  8. Hay un problema con tu fragmento:

    Limita los resultados de búsqueda en el backend, deberías envolverlo con:


    if ( !is_admin() ) {
    // snippet
    }

  9. Entonces, ¿cómo aplicarías esto a una barra de búsqueda específica? No se aplicaría el filtro a todas las barras de búsqueda de tu sitio, ¿verdad?

Deja una respuesta

Gracias por elegir dejar un comentario. Ten en cuenta que todos los comentarios son moderados de acuerdo con nuestra política de comentarios, y tu dirección de correo electrónico NO será publicada. Por favor, NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.