Escribe y presiona 'Enter'

Ocultar categorías en el widget «Categorías» de WordPress

Conoce el Snippet para ocultar categorías en la lista o desplegable del widget de WordPress. Bonito. Feliz sin plugins.

¡Hey revoltosx del GrowW!

En este artículo te hablaré de un fragmento de código que te permite quitar una (o varias) categorías del widget «Categorías» (valga la redundancia).

Cómo excluir categorías del widget

Es muy común que los themes de WordPress incluyan en la plantilla del blog un sidebar donde poder colocar widgets. Como por ejemplo el módulo o Widget «Categorías».

Y, como sabrás, las únicas opciones que tenemos para listar las distintas categorías de tu blog tienen que ver con el estilo. Es decir:

El widget de «Categorías» de WordPress, por defecto no te permite seleccionar cuáles quieres que aparezcan y cuáles no. Solo su estilo.

No importa que lo dejes como una lista, o que selecciones la opción de mostrar como desplegable. El widget incluirá todas y cada una de las categorías que has asignado a una o varias entradas (posts).

Pero claro, hay supuestos en los que necesitamos poder elegir qué categoría mostrar, y cuál no. Por ejemplo si te interesa:

  • Asignar categorías a paginas, y no quieres que esas taxonomías se mezclen con las utilizadas para entradas.
  • Usar una categoría solo para filtrar los posts que quieres mostrar en un slider, y no para clasificar tus contenidos.
  • Crear contenidos privados o Premium, y no quieres que se muestren en el listado general de tu blog.
  • Excluir entradas de ciertas categorías en tu blog y no te interesa que se pueda acceder a su archivo desde el widget.
  • Simplemente no quieres mostrar la categoría «pepito» en widget y punto.

¿Te encuentras en alguna de estas tesituras?

¡Genial!, porque en menos que canta un gallo (aunque realmente no sé lo que tarda) podrás ocultar las categorías que te de la real gana del famoso widget de WP.

¿Qué archivo hay que editar?

Siempre lo advierto, pero, si es la primera vez que me lees, he insistir en lo importante que es editar los archivos del tema hijo (child theme), y dejar intacto el original.

Dicho esto:

El fragmento de código, o snippet, que voy a enseñarte debes incluirlo en el archivo functions.php de tu tema (hijo).

Copiar y pegar, no hay mayor complicación. Pero si ya has probado otros códigos, eres de los que les gusta trastear para personalizarlo, o simplemente no entiendes mucho, antes de nada crea un copia. Por si acaso.

¿Qué hace exactamente el código?

No hay nada peor que invertir tiempo en algo, y darte cuenta de que no era lo que esperabas. Por eso quiero que sepas que el siguiente código no actúa sobre widgets o taxonomías de Custom Post Types (CPT):

Este fragmento de código te permite excluir las categorías que tú quieras del widget «Categorías», en cualquiera de sus modos de visualización: lista y desplegable. Pero solo las de contenidos tipo post type (entradas).

Parece redundante, pero quiero dejar claro que este snippet no vale, por ejemplo, para ocultar categorías de WooCommerce, o de cualquier otro tipo de contenido al que no se le asignen las categorías del tipo Post type.

Código (snippet) para ocultar categorías del Widget Categorías

Sin más dilaciones, aquí tienes el fragmento de código que has de incluir en tu archivo functions.php para ocultar categorías del widget en base a su ID:

/**
 * OCULTAR/EXCLUIR CATEGORÍAS DEL WIDGET -CATEGORÍAS-
 * 
 */

function hide_widget_categories($args) {
    $excluded = 'category_ID_1'; // Sustituir category_ID_1 por el ID de la categoría
    $args['exclude'] = $excluded;
    return $args;
}
add_filter( 'widget_categories_args', 'hide_widget_categories', 10, 1 );
add_filter( 'widget_categories_dropdown_args', 'hide_widget_categories', 10, 1 );

Basicamente, lo que hace este fragmento de código es:

  • Crear la función que se encargará de registrar los elementos en el argumento $args con el parámetro exclude.
  • Almacenar los ID de las categorías en $excluded. Si son más de una deben ir separadas por cómas. Por ejemplo ‘1,2,3’.
  • Añadir los parámetros definidos a los filtros del widget Categories de los distintos modos de visualización: widget_categories_args para la opción de lista, y widget_categories_dropdown_args para el desplegable.
  • Configurar la prioridad de ejecución en 10 ($priority). Este es el valor por defecto, e indica la posición de ejecución con respecto a otras funciones que se enganchan (hook) al mismo filtro.
  • Determinar el número de argumentos que acepta la función en 1 ($accepted_args). Que también es el valor predeterminado.

Observaciones del snippet

Fácil, rápido y para todos. Este código para ocultar categorías del widget en base a su ID es realmente liviano y simple.

Implementarlo te llevará menos de un minuto, y es prácticamente imposible que pueda generar algún conflicto con otros snippets. Eso sí, nunca está de más organizarlo, y ponerle algún comentario para identificarlo y mantener tu functions.php bien ordenado.

Conocer el ID de las categorías

No obstante, a pesar de lo sencillo que es excluir categorías del widget, estoy dando por hecho que sabes buscar o ver el ID que identifica de forma exclusiva a una categoría.

Si te preguntas cómo demonios puedes encontrarlo, no te preocupes es algo muy sencillo y rápido. Te lo explico detalladamente en este artículo sobre cómo encontrar el ID de una categoría en WordPress (y de otros contenidos como páginas, comentarios, autores, etc.).

Verificación de funcionamiento

Para verificar que los cambios realizados se han efectuado correctamente (siempre y cuando no haya generado un conflicto con otras funciones) solo debes comprobar que, en el sidebar de tu web, el Widget «Categorías» no muestra las que has indicado.

Para estar 100% seguros, configura el widget tanto en formato listado, como en modo desplegable, y confirma que funciona en ambos casos.

Y tú, ¿ya has probado a ocultar categorías en el widget?, ¿conoces otras formas de conseguirlo?, ¿este tutorial te ha dado alguna idea para tu proyecto? deja un comentario y, ¡compartamos experiencias!

Sin comentarios

Deja una respuesta

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