WordPress Hosting

Cómo excluir categorías del loop (actualizado)

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' );
    }
}

 

Compartir en redes
Resumir con IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 5

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

12 comentarios en “Cómo excluir categorías del loop (actualizado)”

  1. 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?

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

  3. 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?

  4. 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!

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

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

Los comentarios están cerrados.

Scroll al inicio