¿Te has parado a mirar que resultados aparecen en tu web cuando alguien busca en ella?
Es curioso, pero es de esas cosas que pocas veces revisamos, y al hacerlo podemos llevarnos más de una sorpresa, ya que muchas veces tenemos páginas que por la razón que sea no las tenemos enlazadas desde ningún sitio, ni el menu ni otras páginas, y que no somos conscientes que pueden aparecer en nuestro sitemap o en los resultados de una búsqueda.
Según que páginas, lo mejor será simplemente ponerlas como borrador si realmente no queremos que nadie acceda, pero si las queremos tener activas y simplemente no queremos que aparezca en los resultados, podemos utilizar la siguiente función, indicando el ID de las páginas que no queramos mostrar.
/* --------------------------------------------------------------------------- */ /* --------------------Excluir paginas resultados busqueda------------------------------------------------------- */ add_action( 'pre_get_posts', 'dpw_exclude_specific_pages' ); function dpw_exclude_specific_pages($query) { if ( $query->is_search() && $query->is_main_query() ) $query->set( 'post__not_in', array( 1047, 711 ) ); //Sustituir por los ID de las páginas que queramos ocultar }
Un caso típico son las páginas de avisos legales, cookies, privacidad, etc… que aunque han de estar en la web, no hace falta que salgan en los resultados.
Si lo que necesitamos es que el buscador muestre sólo los resultados dentro de los posts, es decir, no busque en páginas ni ningún otro custom post type, podemos sustituir el código anterior por este:
function filter_search($query) { if(!is_admin()) { // Limit search to posts if($query->is_main_query() && $query->is_search()) { $query->set('post_type', array('post')); } // Return query return $query; } } add_filter('pre_get_posts', 'filter_search');
O modificando la línea de post_type, podemos indicar en que tipo de posts queremos que realize la búsqueda.
Excluir Custom Post Type de los resultados
Si en lugar o además de páginas o posts concretos necesitas excluir un tipo de post personalizado, puedes hacerlo con el siguiente código:
function exlcuir_mi_custom_type() {
global $wp_post_types;
if ( post_type_exists( 'tipo-de-post' ) ) {
$wp_post_types['tipo-de-post']->exclude_from_search = true;
}
}
add_action( 'init', 'exlcuir_mi_custom_type', 99 );
Sustituyendo ‘tipo-de-post’ por el slug del custom post type que corresponda.
¿Eres implementador o desarrollador WordPress?
En la Zona DPW encontrarás más recursos, tutoriales, plantillas, y una biblioteca de snippets para poder utilizar en tu día a día y ganar tiempo en tu trabajo:
ACCEDER AHORA