Categorías y subcategorías en WordPress

Si hacemos clic sobre un vínculo a una categoría, generalmente el archivo index.php nos mostrará una página con todos los artículos pertenecientes a dicha categoría. Pero yo quiero ir más allá y visualizar también las subcategorías, para tener la información de mi sitio web más estructurada.

Esto lo conseguiremos mediante el archivo category.php, que es el que buscará WordPress cada vez que el usuario clique sobre un vínculo a una categoría. Si no lo encuentra, buscará el siguiente archivo de plantilla jerárquicamente superior, el archivo index.php.

 

El archivo category.php

A partir del archivo index.php (haciendo una copia previa del mismo), generamos el siguiente archivo category.php que muestro a continuación:

Vamos a explicar ahora su funcionamiento, para desarrollar en el siguiente apartado las funciones del Codex de WordPress.

Aquí empezamos tomando los datos principales de la categoría actual: título, id, descripción y vínculo. Si queremos, podemos mostrar el ‘id’ por pantalla, pero generalmente lo utilizamos más para consultar el resto de los datos.

Mostramos sólo dos datos por pantalla, el título y la descripción de la categoría. Si os fijáis, antes mostraba también el ‘id’ y el vínculo de la categoría, para comprobar su funcionamiento. Cuando ya no me han hecho falta, los he dejado como comentarios de código inoperativos, mediante <!– Comentario –>. Ahora bien, esto sólo sirve para HTML. Para que tampoco funcione el código PHP, debemos emplear // antes de la sentencia echo.

Sigamos:

Para obtener los datos de las categorías inferiores de una categoría, empleamos la función get_categories( $args ). Esta función precisa que le pasemos una serie más o menos larga de argumentos (que veremos en el siguiente apartado, cuando revisemos el Codex) que se los tenemos que pasar en una matriz asociativa.

Pero esta función nos va a devolver también una matriz de matrices asociativas. La matriz principal contiene todas las diferentes subcategorías, y después cada matriz contenida tiene los diferentes datos de cada subcategoría.

Primero utilizamos el condicional if ( !empty( $categorias_hijas ) ) para comprobar si la función get_categories ha devuelto resultado, es decir, si la categoría contiene subcategorías. La función empty nos devuelve true si la variable está vacía y el signo de acentuación ! es la negación, por lo que le estamos preguntando ‘si no está vacía la variable’.

En caso que existan subcategorías las vamos a mostrar en una caja id=”subcategorias”, en la que incluimos una tabla table class=”subcategorias”.

De la matriz resultante de get_categories, extraeremos cada una de las matrices contenidas correspondiente a cada una de las subcategorías, mediante el bucle foreach( $categorias_hijas as $subcategoria ), donde $subcategoria es la matriz asociativa que contiene los datos individuales.

Para extraer cada datos de esta última matriz, lo hacemos mediante $matriz->titulo_del_campo. Los datos que nos interesan aquí (tiene muchísimos más, ya lo veremos más adelante) son:

  • $subcategoria -> cat_name nos devolverá el título de la categoría.
  • $subcategoria -> category_count nos dice la cantidad de posts que tiene.
  • $subcategoria -> category_description nos da la descripción de la categoría.
  • $subcategoria -> cat_ID nos devuelve el ‘id’ de la categoría.

Este último dato ‘id’ lo emplearemos para conseguir la URL del vínculo a dicha categoría mediante get_category_link( $subcategoria->cat_ID ), con lo que podremos montar el vínculo a dicha subcategoria.

Con todos estos datos montamos la tabla y, finalmente, en caso que la función get_categories no hubiese devuelto ningún resultado, emitimos un comentario al respecto.

El resto del código del archivo corresponde al ‘loop’ que nos devolverá los artículos que tiene la categoría y sus subcategorías, y la inclusión del footer y de la sidebar.

 

Las funciones de categorías del Codex WP

Acudimos ahora a nuestro manido Codex de WordPress, para conocer un poco mejor las funciones que hemos empleado:

  • single_cat_title( $prefix, $display ) Muestra o devuelve (según el valor lógico ‘true’ o ‘false’ de $display, por defecto ‘true’), el título de la categoría actual. $prefix es una cadena opcional a poner delante del título. En nuestro caso hemos empleado $display=’false’ para poder meter el valor en la variable $categoria_actual y trabajar con ella.
  • get_cat_ID( $cat_name ) Devuelve la ID de una categoría indicada por su nombre. El parámetro $cat_name es opcional, y puede omitirse en el ‘loop’.
  • category_description( $category_id ) Devuelve la descripción de la categoría actual o indicada por el id.
  • get_category_link( $category_id ) Devuelve el vínculo de la categoría indicada por su id.
  • get_categories( $args ) Devuelve una matriz con la lista de objetos categoría, según los argumentos pasados en la matriz $args. Esta matriz asociativa se declara $args = array( ‘child_of’ => $categoria_id ).

Esta última función acepta multitud de parámetros, que hay que pasarlos a través de una matriz asociativa:

  • ‘orderby’ => Clave por la que ordenar la lista. Pueden ser campos (‘name’, ‘slug’, ‘term_group’, ‘term_id’, ‘id’, ‘description’), ‘count’ ordenará por cantidad de posts que tenga la categoría. Por defecto es ‘name’.
  • ‘order’ => acepta ‘ASC’ (ascendente) o ‘DESC’ (descendiente). Por defecto, es ‘ASC’
  • ‘hide_empty’ => Si una categoría no tiene posts y este valor es verdadero, dicha categoría no estará en la lista resultante. Por defecto, ‘true’.
  • ‘include’ => Matriz o cadena de ‘id’ separadas por coma o espacio, indicando las ids de las categorías a incluir.
  • ‘exclude’ => Lo mismo que ‘include’ pero para excluir categorías.
  • ‘exclude_tree’ => Como exclude pero excluye también las categorías descendientes.
  • ‘number’ => Cantidad máxima de elementos en la lista. Por defecto es 0, que equivale a todos.
  • ‘fields’ => permite especificar qué campos devolver. Por defecto, es ‘all’ (todos).
  • ‘name’ => nombre o matriz de nombres para devolver sus datos.
  • ‘slug’ => como ‘name’ pero con el slug.
  • ‘hierarchical’ => Indicamos con true que incluya elementos que tengan descendientes no vacíos (siempre que ‘hide_empty’ esté en true). Por defecto, es true.
  • ‘search’ => criterios de búsqueda
  • ‘name_like’ => devuelve términos parecidos al que le proporcionamos.
  • ‘description_like’ => lo mismo con la descripción.
  • ‘child_of’ => devuelve las categorías que son hijas de la que le indicamos.
  • ‘childless’ => Limita los resultados a categorías que no tienen descendientes.

Además de estas funciones, el Codex WP nos proporciona muchísimas más, que relaciono a continuación, para no extender excesivamente este artículo, dejando su estudio a quien le pueda interesar:

  • cat_is_ancestor_of
  • get_all_category_ids
  • get_ancestors
  • get_cat_name
  • get_category
  • get_category_by_path
  • get_category_by_slug
  • get_the_category_by_ID
  • get_the_category_list
  • get_category_parents
  • get_the_category
  • in_category
  • is_category
  • wp_category_checklist
  • wp_dropdown_categories
  • wp_list_categories

Y, si os parecen pocas, os aseguro que WordPress ofrece bastantes más.

 

Detalles del código

Para quien tenga un poco menos de conocimiento en programación web, vamos a ver 2 pequeños detalles del código del archivo category.php:

  • Las tablas: si nos fijamos, para crear las tablas empleamos la siguiente codificación:

    donde <table>…</table> delimitan la tabla, las diferentes líneas van entre <tr> y </tr> y las columnas <td>…</td>, en todos los casos salvo la primera línea que las columnas son <th>…</th>.
  • El resultado de get_categories. No he encontrado en ningún sitio qué datos retornaba esta función, incluido el Codex de WordPress. Para averiguarlo, he hecho una primera prueba con la sentencia de PHP var_dump( $categorias_hijas ), que me ha dado la siguiente información:

    Sólo así he podido saber qué campos me ofrecían la información que yo necesitaba.

 

Estilización con CSS

Añadimos al final del archivo de hojas de estilo style.css el siguiente bloque de código:

Y, en las líneas dónde definíamos h1 a, h2 a, h1 a:hover, h2 a:hover, añadimos h3 a, h3 a:hover.

Quedándonos el siguiente resultado:

tabla

No os preocupéis de momento con el estilo. Ya nos ocuparemos más adelante, cuando entremos, en serio, a formatear nuestro resultado en pantalla.

 

En este capítulo hemos visto cómo añadir subcategorías a un archivo de plantilla category.php. En los próximos archivos vamos a estudiar cómo mejorar la salida por pantalla de nuestro sitio web, empezando por la inclusión de imágenes.

2 opiniones en “Categorías y subcategorías en WordPress”

Deja un comentario

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