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
ypost_tag
).- Se excluyen:
- Categoría con ID
3
dentro deproyectos
. - Etiqueta con slug
urgent
.
- Categoría con ID
🛠 ¿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
yproduct
).