Ocultar categoría

Categoría oculta del blog

Ocultar entradas de una categoría determinada puede ser algo util según el enfoque y contenidos de nuestro wordpress. Estas son unas pocas líneas de código agrupadas en dos sencillas funciones para conseguir que WordPress no muestre en el blog las entradas que tengan una o más categorías concretas y también evitar que aparezca esa categoría en el widget «Categorías».

Un caso en qué querría hacer esto será si quiero tener una página sólo con las entradas de una temática concreta, por ejemplo entradas donde hablo de cursos que imparto. Tengo agrupadas estas entradas bajo una misma categoría (cursos) y no quiero que aparezcan el blog porque quiero tenerlos agrupados y evitarme posible contenido duplicado.

Ocultar una categoría del blog

Lo primero será editar el archivo functions.php añadiendo el siguiente código:


/** excluir la categoria del blog **/
function excludeCat($query) {
if ( $query->is_home ) {
$query->set('cat', '-54');
}
return $query;
}
add_filter('pre_get_posts', 'excludeCat');

después, en la línea
$query->set('cat', '-54');

cambio el valor ‘-54‘ por la ID de la categoría que quiero excluir, sin olvidar poner el signo menos () delante. En caso de querer excluir varias categorías las pongo separadas por coma
$query->set('cat', '-6,-11,-54');

 

Excluir una categoría del widget «Categorías»

Por supuesto, al quitar las entradas con determinadas categorías del blog también puedo querer quitarlas del widget «Categorías», para eso tengo esta segunda función que añadiré seguido de la anterior en el archivo functions.php

/** excluir la categoria del widget categories **/
function exclude_widget_categories($args) {
$excluded = '54';
$args['exclude'] = $excluded;
return $args;
}
add_filter( 'widget_categories_args', 'exclude_widget_categories' );

Igual que antes, si quiero excluir varias categorías, las separo con comas pero esta vez no llevan el signo menos () por delante
$excluded = '25,32,65';

14 thoughts on “Categoría oculta del blog


  1. Marta

    Gracias por tu artículo!

    Sólo tengo una pregunta: a qué altura de functions.php tengo que incluir estas líneas de código?

    Gracias!

  2. lk2_89

    ¡Buenas!

    Ante todo, mil gracias por el post. Llevaba bastante tiempo queriendo ocultar una categoría de mi blog. Aunque me gustaría hacerte una pregunta. Además de ocultarlo del widget de categorías, me gustaría que al final de las entradas tampoco apareciese.

    Es decir, quitar la categoría oculta de la información que recoge en que categorías está asignada una entrada. No se si me explico bien >.<

    ¡Muchas gracias!

    • JSoleguia

      Buenos días, Pablo.

      Primero, disculpa por tardar en contestar, me escribiste justo el día que salía de vacaciones.

      No sé si lo habrás resuelto ya pero te contesto: lo de quitar la categoría de la lista de categorías que se muestran junto a la entrada se puede hacer. Tienes que tocar un poco de código php, concretamente crear una función que luego reemplazarás donde se muestren las entradas(index.php, home.php, single.php, archive.php, category.php).

      Está resuelto aquí https://wordpress.stackexchange.com/questions/181182/hide-a-certain-category-name-without-removing-it

      Tienes que añadir esta función a tu archivo functions.php

      function exclude_cats($excludedcats = array()){

      $categories = get_the_category();
      $separator = ', ';
      $output = '';
      foreach($categories as $category) {
      if ( !in_array($category->cat_ID, $excludedcats) ) {
      $output .= 'term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '">'.$category->cat_name.''.$separator;
      }
      }
      echo trim($output, $separator);

      }

      El código sprintf( __( «View all posts in %s» ) lo puedes eliminar si quieres, reemplázalo por unas comillas vacías y listo.

      Después en los archivos donde aparecen las entradas (index.php, home.php, single.php, archive.php, category.php) tendrás que reemplazar la llamada a las categorías por la llamada a la función:

      exclude_cats(array(11, 40, 53));

      Siendo los valores que pasas al array (11, 40, 53) la/s id de la/s categoría/s que quieres ocultar.

      Espero haberte ayudado.

      Un saludo.

      • lk2_89

        Dejé pasar el tiempo y olvidé esta entrada en el tiempo, quizás porque abandoné mi blog. Ahora que estoy por retomarlo, he recordado que te pregunté sobre como ocultar las categorías al lado de las entradas.

        He probado el código pero al guardar el fichero functions me sale el siguiente aviso:

        Los cambios en tu código PHP se han revertido debido a un error en la línea 358 del archivo wp-content/themes/brunch-pro/functions.php. Por favor, arréglalo y trata de guardar de nuevo.

        syntax error, unexpected ‘» title=»‘ (T_CONSTANT_ENCAPSED_STRING)

        La línea 358 coincide con el código donde aparece sprintf, pero no se como solucionarlo.

        ¿Se te ocurre que puede ser?

        Gracias nuevamente.

        • JSoleguia

          Buenas, Pablo

          del texto del error «un error en la línea 358 del archivo wp-content/themes/brunch-pro/functions.php» deduzco que es algo en el archivo functions dentro del theme que estás usando (brunch-pro).

          Antes de meter código propio en un theme que no has creado tú lo primero que deberías hacer es crear un child-theme. Esto sirve para que llegado el momento de actualizar el theme no pierdas los cambios o códigos personalizados que pudieses haber introducido.

          Viendo el error: syntax error, unexpected ‘” title=”‘ (T_CONSTANT_ENCAPSED_STRING)
          Te diría que seguramente hay algo mal concatenado, pero sin ver el código en si no te puedo ayudar mucho más.
          Si quieres pásame esa línea 358 y le echo un vistazo.

          Un saludo.

  3. Joaquín C.

    Simple y funciona, gracias.

    Estoy haciendo un blog con tienda y no me hacia gracia que los posts de la tienda, apareciesen como posts del blog.

    Como uso un tema ‘hijo’ no necesito tocar el archivo functions.php lo cual me deja más tranquilo por si las actualizaciones.

    Saludos.

  4. Cynthia Espinal

    Saludos,

    Excelente post, mil gracias. Lo único es que tengo una duda. Es posible ocultar «x» categoría pero con una excepción? Es decir, yo quiero ocultar una categoría de todas las páginas de mi site, con excepción del home.

    • JSoleguia

      Hola, Cynthia

      podrías añadir una condición para cargar el filtro:

      function excludeCat($query) {
        if( is_home() ) {
          $query->set('cat', '-54');
        }
        return $query;
      }
      add_filter('pre_get_posts', 'excludeCat');

      is_home para el blog
      is_front_page para la página de inicio

      Un saludo.

  5. JUAN

    Hola que bueno esto, pero me falta una cosita, a mi me gustaría ocultar las categoría de un pluging que estoy usando, este pluging es: https://www.chronosly.com/. La idea sería que los usuarios registrados solo pudieran escribir en una categoría concreta.

    Se puede hacer?

    Gracias por tu ayuda
    Juan

    • JSoleguia

      Hola, Juan

      nunca he utilizado ese plugin pero entiendo que al tratarse de un plugin de eventos lo que hace es crear un tipo de entrada personalizado (custom post type) y que trabaja con taxonomías específicas para esos eventos.

      En ese caso este código no te serviría para ocultar las categorías de los eventos (taxonomías), habría que ver cómo funciona el plugin en cuestión porque es posible que tenga sus propias funciones que hagan esto o si no darle una vuelta a un código a medida enfocado a esas taxonomías.

      Respecto a que los usuarios registrados sólo puedan escribir en una categoría concreta, supongo que estaríamos en las mismas y sería necesario hacer un código a medida que haga que no se muestre el formulario de comentarios en eventos con dichas taxonomías.

      Siento no poder serte de más ayuda.

      Un saludo.

  6. Alejandra

    Hola Juan, Primero que todo quiero darte las gracias por la voluntad de hacer este articulo y además contestar nuestras preguntas. Mi consulta es la siguiente quiero ocultar todas las categorías, tags y fecha de publicación de mis entradas. Como puedo hacerlo.
    Gracias nuevamente.
    Saludos!

    • JSoleguia

      Hola, Alejandra

      soy Josu, no Juan, Juan es el chico que hizo la preguna anterior.

      Para lo que tú quieres necesitarías editar el archivo single.php de tu theme y eliminar del mismo las líneas que cargan esa información.

      Veo que tienes tu web maquetada con Elementor, he utilizado otros maquetadores visuales pero no ese. Si buscas un poco quizá tengas por algún lado plantilla de Elementor para las entradas y puedas hacerlo sin tocar código.

      También he visto que alguna de tus páginas, como Historia del gato, no muestran la cabecera de la web.
      Deberías solucionar eso porque si no el usuario que entre ahí no tiene posibilidad de volver al resto de la web y podrías perderle.

      Un saludo.

Responder a Joaquín C. Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.