Hay ocasiones en que no quieres que se muestren posts de ciertas categorías en tu blog, bien porque las quieres mostrar solo en secciones específicas, o porque son solo para un tipo de usuario, tu decides el motivo.
Si alguna vez has pensado en que necesitas excluir posts de ciertas categorías y que no se muestren en según que lugares de tu blog, la página principal, por ejemplo, aquí tienes dos modos de conseguirlo.
Ultimate Category Excluder
Como siempre, o casi, hay un plugin para conseguirlo. Gracias a Ultimate Category Excluder puedes decidir si ciertas categorías se mostrarán en la página principal o incluso en la lista de categorías de tu barra lateral. Solo tienes que elegir la categoría y marcar las casillas adecuadas a cada caso.

Modificando el Loop
Por supuesto, también puedes modificar manualmente el loop de WordPress, lo que te dará mucha mas flexibilidad pues vas a poder utilizar este sistema de exclusión de categorías en cualquier lugar de tu blog.
Para ello debes modificar la «llamada» a las categorías de posts a mostrar por algo similar a este ejemplo:
<!--?php if ( have_posts() ) : query_posts($query_string .'&cat=-1,-2'); while ( have_posts() ) : the_post(); ?-->
Donde ‘-1’ y ‘-2’ serían los ID de categoría a excluir que, como es normal, puedes ampliar, reducir o cambiar a tu gusto.
Añadiendo una función que las excluya
Lo mismo pero más limpio, sería añadir una función como esta a tu plugin de personalizaciones o al fichero functions.php del tema hijo:
add_action( 'pre_get_posts', 'exclude_specific_cats' );
function exclude_specific_cats( $wp_query ) {
if( !is_admin() && is_main_query() && is_home() ) {
$wp_query->set( 'cat', '-1,-2' );
}
}
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!






A mi lo que me gustaría hacer es evitar que se vean las subcategorías en la barra lateral, en el widget de categorías que tengo puesto, pero que se siguieran viendo en las entradas que la llevan y como no, todas esas noticias en al página principal. ¿Habría alguna forma de hacerlo?
Otra manera sería utilizando "continue"….
.
Interesante, sobre todo porque en la imagen aparece la opción de no mostrar los post de algunas categorias en la pagina archive, leí en alguna parte que eso era imposible de hacer con un plugin… Lo probare.
Saludos
Muy útil, muchas gracias por la información!
Hola Fernando. Gracias por el articulo. Probé modificar el loop para excluir las categorias de la forma que tu dices en el tema Kubrick y funciona perfectamente, pero cuando lo intento en K2 que es el tema que estoy usando, me produce un error y el sitio deja de funcionar.
Alguna idea de a que puede deberse?
Perfecto! Muy útil! Gracias!
Hola, fijate que inserte el codigo que tu expones aqui, modificando las IDS que deseo excluir las cuales son 3 y 4 y resulta que no pasa nada al actualizar el archivo del tema.
Te dejo mi index original por si me deseas ayudar, las ID´s que quiero excluir son las 3 y 4.
Aqui pegue el codigo PHP del index en copypastecode
http://www.copypastecode.com/36526/
Gracas por su ayuda!
Que bueno conseguir esta info cuando la andas buscando!. Mil, gracias!
Genial! mucho más limpio que no instalar más plugins en el WP! muchas gracias!
Jelou Fernando
Ya se que esta entrada es antigua, pero me gustaría hacerte una consulta ¿es posible aplicar esto a una página en concreto?
[Nota: uso Divi y el módulo blog para esto]
Te cuento: como tengo mala cabeza quiero hacerme una página para apuntar los encargos de mi clientes como cpt y añadirle categorías. Esto lo he conseguido ¡hasta los filtro! también he creado la cat «entregado» que como su propio nombre indica… el caso es que me gustaría que a los que le añadiese esta última cat no me apareciesen en el módulo «encargos» es decir que desaparezcan aunque sigan teniendo las cats anteriores. También he creado una página para los «entregados» y funciona bien con las opciones de módulo de Divi (mostrar cats) marcando sólo «entregados». Pero no consigo que «desaparezcan» de «encargos». El código que he usado es:
function exclude_entregados( $query ) {
if ( $query->is_page ( 1650 ) ) {
$query->set( ‘cat’, ‘-57’ );
}
return $query;
}
add_filter( ‘pre_get_posts’, ‘exclude_entregados’ );
He probado con el nombre, el slug… y nada, incluso con [‘pagename’]==’Pedidos’ y cosas así.
Perdón y gracias, oh Sensei.
Jelou again Fernando
Al final probé con el siguiente código:
//excluir entregados en pedidos
function exclude_category($query) {
if ( $query->is_archive (1650) ) {
$query->set(‘cat’, ‘-57’);
}
return $query;
}
add_filter(‘pre_get_posts’, ‘exclude_category’);
Donde 1650 es la id de la página donde quería excluir la categoría, que tiene como id 57.
Al colocarlo en el archivo funciones del tema hijo funcionaba pero con un «pequeño fallo»: ocultaba la categoría en TODA la web… no me servía así…
Bicheando un rato encontré este plugin en el repositorio WP: «Woody code snippets» que permite insertar códigos en un montón de sitios (creo que está más pensado para los ads y códigos de seguimiento) pero gracias a su opción «shortcode» he podido insertar ese mismo código anterior en la página que necesitaba y no en toda la web.
Sé bien que es una ñapa total…. no tenía ganas de usar oooootro plugin, pero ese fallo al escribir el código no me permitía identificar correctamente la página a la que «reservaba» el código y se aplicaba, como he dicho, a toda la web, lo que no me servía… Seguro que es un fallo mío, al intentar modificar el código sólo para una página, por ignorante total en php! y no saber nombrar la página correctamente. Yo funciono en esto a base de cabezazos… Pero dando unos cuantos más he encontrado esto, que no siendo lo ideal es lo que por ahora me hace lo que yo quería.
Gracias por tu tiempo, tu dedicación y tu maestría, oh Sensei.
Bicheando se han hecho grandes logros 😀