Seleccionar página

clasificador-spectrafile-fuelle-a4-13dpLas taxonomías de WordPress son realmente útiles para organizar nuestras entradas. Pero en ocasiones se nos quedan cortas de funcionalidad. Un título, una descripción y un slug es poco cuando queremos dar más información sobre nuestro modo de ordenar.

¿Taxonoqué?

Quizá debería explicar brevemente lo que es una taxonomía, porque es un término que puede llevar fácilmente a confusión. La palabra “taxonomía” se refiere a la ciencia de la clasificación. Así que, efectivamente, una taxonomía es una forma de clasificar entradas, sean del tipo que sean. El ejemplo más claro son las categorías y etiquetas de las entradas (posts) de WordPress. Dentro de la taxonomía “Categorías” de WordPress creamos las distintas secciones (o categorías) del blog, y dentro de la taxonomía “Etiquetas”, ponemos a la entrada ciertas palabras que servirán para luego encontrar la entrada. Cada elemento de una taxonomía es un término (term). Una taxonomía puede ser jerárquica (como las categorías de WordPress, podemos tener subcategorías dentro de otras categorías) o no (como las etiquetas).

Más es mejor

Dicho esto, pasemos a la acción. Para que sea más fácil de entender, lo haremos con las ya conocidas Categorías de las entradas de WordPress, pero esto es aplicable a cualquier taxonomía que creemos.

A veces queremos mostrar una ventana con todas nuestras categorías, y que el usuario pueda acceder a una u otra. Una lista de categorías con una imagen y un pequeño texto. Espera, ¿He dicho imagen? ¿Acaso podemos establecer una imagen a una categoría? Por defecto, no. Afortunadamente, es fácil de solucionar.

Qué vamos a hacer

Resumiendo un poco, esto se soluciona creando un plugin nuevo (o tocando el archivo functions.php de nuestro theme) y con tres funciones.

  1. La primera añade los campos que queramos a la pantalla de creación de categoría.
  2. La segunda añade los campos a la pantalla de edición de categoría.
  3. La tercera guarda el contenido de ambas pantallas.

Modificando la creación de nuevas categorías

La función más simple de todas, puesto que sólo contiene código HTML.

Vale, expliquemos esto en un segundo.

Lo único que hace la función es añadir código en HTML. Por cada campo, añade un label, un input de texto y un p para la descripción. El campo importante es el de texto, y, para mantener una coherencia lógica, se llamará term_meta[<nombre_del_campo>]. De esta forma luego podremos recuperar el valor muy fácilmente.

Me interesa mucho que veamos la linea final en detalle.

Esta es la acción que se encarga de que la función que acabamos de crear haga su trabajo. Ahora funcionará, porque me he encargado de ello, pero si estamos trabajando con otra taxonomía diferente a “Category”, entonces tenemos que cambiar el primer parámetro, ‘category_add_form_fields’, donde sustituiremos category por el slug de nuestra taxonomía.

¿Queda esto claro? Lo volveremos a hacer con el resto de funciones.

La pantalla de edición

Aquí se complica un pelín el asunto. Vamos a introducir código HTML de nuevo, algo distinto por la disposición de esta ventana, y sobre todo, vamos a incluir código PHP recuperando los valores de los campos concretos.

Aquí, lo primero que hacemos es trabajar con el término. Pensad que esto es la pantalla de edición de un término, por lo que necesitamos usar $term para recuperar su información. $term_meta obtiene todos los meta datos de un término con get_option y la id del término.

Luego, en el value de cada input, recuperamos el valor de $term_meta que nos interesa y lo mostramos. En nuestro caso, “texto01” e “imagen”.

Finalmente, recordad que tenéis que usar el slug correcto de vuestra taxonomía en la acción de la última línea.

Guardando la información

¿Y de qué serviría todo esto si no guardamos los datos? La última función se encarga de ello:

Esta función la podéis copiar tal cual y cambiarle el nombre de la función, y establecer la taxonomía correcta en ambas acciones (editar y crear), y ya funcionará correctamente. Aun así, la explico. Si existe la variable POST correspondiente a term_meta (es decir, si hemos escrito algo en nuestros nuevos campos). se ejecutará el resto. Una vez más se obtienen, para el término en el que estamos, todos los meta datos. Además, se crea un array con los datos de POST term_meta (que vienen en forma de array al haberlos escrito como term_meta[campo]). Teniendo todos los campos de un término por un lado, y por el otro la información introducida por el usuario, se comprueba que existe información para cada campo, y se escribe (o se sobreescribe si ya habia).

Recuperando la información

Claro, ahora querrás recuperar esta información en el Theme, ¿No? Fíjate bien porque es algo que ya hemos hecho antes.

Si volvemos al supuesto inicial, estamos en una pantalla donde mostramos uno por uno todos los términos de la taxonomía (en nuestro caso, todas las categorías que hemos creado). Por tanto, en algún momento trabajamos con un array de términos, y tenemos acceso a la ID de ese término. Con ella, podemos obtener todos los meta datos del término en una variable:

Y luego nos bastará usar $term_meta[‘texto01’], siguiendo el ejemplo, para recuperar el campo que hemos creado antes.

Resumiendo

Bueno, no me he entretenido en crear campos super interactivos que permiten seleccionar una imagen directamente del gestor de archivos y… No, lo siento. Mi idea principal era explicar cómo añadir campos a una taxonomía, y lo he hecho de la forma más simple posible. Queda pendiente para otro día.

Hemos creado tres funciones. Una modifica la pantalla de creación de términos. La segunda, la de edición de términos. Y la última guarda la información cada vez que el usuario/admin pulsa en “Guardar”. Ha sido sencillo, ¿Verdad?

Para cualquier duda, podéis escribir un comentario e intentaré responderlo lo antes posible.

Los ordenadores son buenos siguiendo instrucciones, no leyendo tu mente
.- Donald Knuth