Excluir páginas o posts en los resultados de búsqueda de WordPress

¿Cómo ocultar fácilmente algunas páginas o posts de los resultados de la búsqueda de nuestra web?


por

¿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.

Desarrollo Web by esther solà
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.