Categoría oculta del blog

Ocultar categoría

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

8 comentarios sobre “Categoría oculta del blog

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

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

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

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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