WordPress: Ordenar cronológicamente etiquetas, categorías y taxonomías

He creado un plugin para ordenar cronológicamente etiquetas, categorías y taxonomías. Está ya a vuestra disposición de forma gratuita en el repositorio oficial de WordPress:

IDATERMS – Plugin Directory — WordPress

¿Para qué sirve este plugin?

plugin para ordenar cronológicamente etiquetas, categorías y taxonomías En el panel de administración de WordPress no es posible ordenar cronológicamente las etiquetas, categorías o cualquier otra taxonomía que hayas creado. En las entradas, las entradas personalizadas, páginas y medios no existe este problema porque se almacenan en la BBDD su fecha de creación y en el panel de administración tenemos una columna “Fecha” para ordenarlos cronológicamente.

En cambio en las taxonomías vas a tener sólo 4 columnas por defecto: Nombre, Descripción, Slug y Cantidad. Ninguna de las columnas por defecto va a ordenar cronológicamente los términos (terms), en la tabla wp_terms no se almacenan su fecha de creación.

Quizás no sea un problema para el común de los wordpresseros, pero a mi me ha ocurrido en mi web de cine y series elfinalde.com que tengo registrada una taxonomía de “actores” con más de 35.000 términos y necesitaba averiguar cuáles eran los últimos 10 actores que había añadido.

Además en muchos proyectos he tenido que enseñar al cliente cómo obtener el ID de una categoría o etiqueta para que la utilice en algún widget, plugin, slider o shortcode, ya sabéis, viendo la URI de la misma.

Así que uniendo los 3 conceptos ID – DATE y Terms y en una explosión de creatividad (jajaja) llamé al plugin IDATERMS que añade una columna en las páginas de taxonomías (Etiquetas, Categorías y taxonomías personalizadas) con el ID de cada term.

Al activarlo tendrás por defecto esta nueva columna en las Categorías y en las Etiquetas. Si tienes taxonomías personalizadas puedes ir a Ajustes > IDATERMS para seleccionar en cuáles quieres añadir esta columna.

El plugin en acción:

Existen otras 2 soluciones sin plugins:

  1. una sencilla, sin código para casos puntuales,
  2. otra mediante código para añadir una columna extra.

Todas estas soluciones se basan en que las taxonomías tienen un campo term_id autoincremental, es decir, WordPress viene con una categoría por defecto “Uncategorized” y su ID es 1. El siguiente término que añadamos sea cual sea su taxonomía (una etiqueta, una taxonomía personalizada u otra categoría) tendrá un term_id con valor 2, el siguiente 3 y así sucesivamente, de forma que aunque no sea un campo de fecha sabemos que el término con term_id 15 se creó después del 10.

1. Solución más sencilla sin código

Para un caso puntual la solución es bastante sencilla, en la página de administración de la taxonomía que quieres ordenar no tienes más que cambiar la URI.

En el parámetro orderby pones como valor “term_ID” y en order “asc o desc” dependiendo si quieres que se muestren de las más nuevas a las más antiguas o viceversa

http://tudominio.com/wp-admin/edit-tags.php?taxonomy=category&orderby=term_ID&order=asc

En este ejemplo veremos las categorías (taxonomy=category) ordenadas cronológicamente (orderby=term_ID) de las más antiguas a las más nuevas (order=asc)

2. Solución estable con código

Si como en mi caso te conviene tener siempre a mano la posibilidad de ordenar cronológicamente las taxonomías puedes añadir el siguiente código (las 3 funciones) a tu archivo functions.php o en un plugin.

Conseguiremos una nueva columna en la(s) taxonomía(s) que nos permitirá ordenarla cronológicamente.

Aunque sea una solución estable si en algún momento nos estorba siempre podremos ocultarla mediante las “Opciones de pantalla”

Necesitamos 3 funciones y 3 filtros:

1. manage_edit-{taxonomía}_columns
2. manage_edit-{taxonomía}_custom_column
3. manage_edit-{taxonomía}_sortable_columns

1. Función para añadir columna y posicionarla la primera, antes de “Nombre”

function nueva_columna_taxonomy_columns( $defaults )
{
	$nuevascolumnas = array();
    
    foreach($defaults as $key=>$value) {
        
        if($key=='name') {  // buscamos la primera columna "Nombre"
          $nuevascolumnas['mi_columna_ID'] = __('ID');  // añadimos nuestra nueva columna antes que nombre, podemos llamarla Fecha, ID o como queramos
        }    
        
        $nuevascolumnas[$key]=$value;
    }  

    return $nuevascolumnas; 

	
}

add_filter('manage_edit-post_tag_columns' , 'nueva_columna_taxonomy_columns');
add_filter('manage_edit-category_columns' , 'nueva_columna_taxonomy_columns');

En esta función hemos buscado en el array de las columnas por defecto ($defaults) la primera columna que es ‘name’ (Nombre) y añadimos nuestra nueva columna antes que ella y devolviendo un nuevo array.

Por último le pasamos el filtro a las taxonomías donde queremos utilizarla. En nuestro ejemplo la hemos añadido a las categorías (category) y a las etiquetas (post_tag) pero si quisiéramos añadirla a alguna taxonomía personalizada simplemente añadimos el filtro con el nombre de esa taxonomía manage_edit-{taxonomía}_columns, por ejemplo:

add_filter('manage_edit-actores_columns' , 'nueva_columna_taxonomy_columns');

2. Función para añadir contenido a la nueva columna

Ponemos como contenido el term_ID de cada término. Al igual que en la función anterior si queremos añadir alguna taxonomía personalizada, por ejemplo “actores” añadimos:

add_filter( 'manage_actores_custom_column', 'nueva_columna_taxonomy_contenido', 10, 3 ); // aquí le ponemos la prioridad (10) y el número de argumentos que por defecto es 1 lo pasamos a 3

function nueva_columna_taxonomy_contenido ( $content, $nombre_columna, $term_ID )
{
    if ( 'mi_columna_ID' == $nombre_columna ) { 
        
        $content = $term_ID;
    }
    
	return $content;
}

add_filter( 'manage_post_tag_custom_column', 'nueva_columna_taxonomy_contenido', 10, 3 );
add_filter( 'manage_category_custom_column', 'nueva_columna_taxonomy_contenido', 10, 3 );

3. Función para hacer que la columna se ordene

Todo lo anterior no tiene verdadera utilidad si no podemos ordenar los términos por su ID, gracias al filtro manage_edit-{taxonomía}_sortable_columns WordPress añadirá al título de nuestra columna el icono de la flechita con CSS y lo hará clickable.

function mi_columna_sortable_columns( $sortable_columns ) {

   $sortable_columns[ 'mi_columna_ID' ] = 'term_ID';

 return $sortable_columns;

}

add_filter( 'manage_edit-post_tag_sortable_columns', 'mi_columna_sortable_columns' );
add_filter( 'manage_edit-category_sortable_columns', 'mi_columna_sortable_columns' );
Escribí esto el 13/02/2017

Tu comentario