Añadir filtros a los resultados de búsqueda del search box

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

En esta lección aprenderás a personalizar los resultados de búsqueda en WordPress utilizando pre_get_posts, un gancho que permite modificar las consultas de WordPress antes de que se ejecuten. Esto es útil para excluir categorías, mostrar solo ciertos tipos de contenido y mejorar la experiencia del usuario en tu sitio web.

🚫 Excluir categorías de los resultados de búsqueda

El primer fragmento de código permite excluir ciertas categorías de los resultados de búsqueda o de la página principal (is_home).

function exclude_category($query) {
    if ( $query->is_home ) {
        $query->set( 'tax_query', array(
            'relation' => 'OR',
            array(
                'post_type' =>'proyectos',
                'taxonomy' => 'category',
                'field' =>  'ID',
                'terms' => 3
            ),
            array(
                'taxonomy' => 'post_tag',
                'field' => 'slug',
                'terms' => 'urgent'
            )
        ));
    }
    return $query;
}
add_filter('pre_get_posts', 'exclude_category');

¿Qué hace este código?

  • Comprueba si la consulta corresponde a la página de inicio (is_home).
  • Modifica la consulta ($query->set) para excluir ciertas categorías y etiquetas.
  • tax_query se usa para filtrar por taxonomías (category y post_tag).
  • Se excluyen:
    • Categoría con ID 3 dentro de proyectos.
    • Etiqueta con slug urgent.

🛠 ¿Cómo adaptarlo a tu sitio?

  • Cambia el número 3 por el ID de la categoría que quieres excluir.
  • Modifica 'urgent' por el slug de la etiqueta que deseas omitir.

📂 Mostrar solo ciertos tipos de contenido en la búsqueda

Si quieres que los resultados de búsqueda solo incluyan ciertos tipos de contenido (por ejemplo, post, page y product), usa este código:

function searchfilter($query) {
 
    if ($query->is_search && !is_admin() ) {
        $query->set('post_type',array('post','page', 'product'));
    }
    return $query;
}
 
add_filter('pre_get_posts','searchfilter');

¿Qué hace este código?

  • Comprueba si la consulta es una búsqueda (is_search) y si no está en el administrador (!is_admin()).
  • Filtra los resultados para que solo muestren los tipos de contenido definidos en post_type (post, page y product).

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.