Contenido

Taxonomía en WordPress 2.3

27 ago

+ 22

De entre las novedades de WordPress 2.3, podemos destacar el sistema de taxonomía que nos permite catalogar nuestros posts mediante tags, sin perder el sistema de categorías que ya poseíamos.

Para conseguir esta funcionalidad se ha tenido que modificar el código y sobretodo la base de datos que es la base de este sistema. Un diseño de base de datos erroneo puede ser el punto de inflexión para decidir de una aplicación triunfa o se derrumba.

En el sistema de taxonomía han apostado por un modelo de 3 tablas que nos permiten enlazar taxonomías con terminos. Ya podemos ver estas tres tablas para hacernos una idea de como afrontar las nuevos plugins que desarrollemos para WordPress.

wp_terms

CREATE TABLE $wpdb->terms (
 term_id bigint(20) NOT NULL auto_increment,
 name varchar(55) NOT NULL default '',
 slug varchar(200) NOT NULL default '',
 term_group bigint(10) NOT NULL default 0,
 PRIMARY KEY  (term_id),
 UNIQUE KEY slug (slug)
);

Esta tabla contendrá todos los tags que hayamos creado, serán tratados y almacenados de forma única evitando repeticiones. Podemos ver slug, que se trata de la URL que nos llevará a filtrar por ese término.

wp_taxonomy

CREATE TABLE $wpdb->term_taxonomy (
 term_taxonomy_id bigint(20) NOT NULL auto_increment,
 term_id bigint(20) NOT NULL default 0,
 taxonomy varchar(32) NOT NULL default '',
 description longtext NOT NULL,
 parent bigint(20) NOT NULL default 0,
 count bigint(20) NOT NULL default 0,
 PRIMARY KEY  (term_taxonomy_id),
 UNIQUE KEY term_id_taxonomy (term_id,taxonomy)
);

Un término no es una categoría o un tag por si mismo, necesitamos crear un contexto mediante la tabla term_taxonomy. Por defecto las taxonomías creadas serán “category“, “link_category” y “post_tag“, aunque podremos ampliarlas mediante plugins. Además nos permitirá que los items introducidos tengan hijos.

wp_term_relationship 

CREATE TABLE $wpdb->term_relationships (
 object_id bigint(20) NOT NULL default 0,
 term_taxonomy_id bigint(20) NOT NULL default 0,
 PRIMARY KEY  (object_id,term_taxonomy_id),
 KEY term_taxonomy_id (term_taxonomy_id)
);

Necesitamos una tabla que nos referencie una taxonomía con un objeto (post, categoría,…).

API

Ya podemos ir viendo el API que tendremos disponible para desarrollar con esta funcionalidad que el nuevo WordPress nos va a deleitar.

  • Que curioso, se parece a lo que hace Drupal

  • Pero entonces; a los blogs que ya usen tags con algun plugin al actualizarse a la nueva version tendran que volver a taggear todo?

    Es que es quizá lo único que no le veo claro al asunto…

  • Antonio: Sip. Viva la polinización cruzada, ¿no? Gracias a ella Drupal puede tomar ideas de WordPress y viceversa.

    Menos mal que no tenemos problemas conque esto suceda, no fueran a tacharnos de mezquinos por pensar que por haber escogido una plataforma automáticamente pensáramos que todas las demás son malas y merecen que uno haga puntillitas cada vez que se cree superior.

  • Himliano, uno de los proyectos abiertos es una migración de UTW al nuevo sistema. Habrá que esperar a ver que tal funciona.

  • Sí, eso siempre estará ahi; la gente que crea los plugins seguro que idea alguna manera de hacer una migracion del plugin a lo que ya traiga WordPress.

    Al menos, la gente que use tags similares a las categorias lo tendrá un poco más fácil…
    Habrá que ver como funciona la cosa.

  • Es decir que a un post le voy a poder asignar una categoria y varios tags(las dos cosas al mismo tiempo)? Me gusta.

  • Después de instalar la beta de wordpress 2.3 al entrar en cualquier categoría de la web abajo sale este error alguien me puede orientar para solucionarlo por favor.

    [quote]

    WordPress database error: [Unknown column ‘post_id’ in ‘field list’]

    SELECT count(DISTINCT post_id) FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE 1=1 AND wp_term_taxonomy.taxonomy = ‘category’ AND wp_term_taxonomy.term_id IN (’30’) AND post_type = ‘post’ AND (post_status = ‘publish’ OR post_status = ‘private’) ORDER BY post_date DESC

    [/quote]

  • la pajina de internet esta muy padre esta muy bien por q encuentra todo lo que estas buscando

  • muchas gracias por la info, tocara probarlo haber como va :)
    salu2

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.