WordPress 2.3 Struttura Tassonomia


Una delle novità principali della versione 2.3 riguarda la nuova gestione dei tag, per questa nuova funzionalità la struttura dei database è cambiata in maniera significativa, di seguito la traduzione di un articolo di Ryan Boren a riguardo:

WordPress 2.3 introduce un nuovo schema per la tassonomia. Questo nuovo schema rimpiazza le tabelle delle catgorie: post2cat e link2cat con tre nuove tabelle che risultano essere molto più flessibili. La prima tabella terms. Contiene le informazioni di base su un dato termine. La sua struttura si presenta così:

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)

“name” è semplicemente il nome di un dato termine. “slug” è il nome ridotto in una forma “URL friendly”. “term_group” ha lo scopo di raggruppare termini simili. “term_id” è un ID unico per il termine.

Un termine non è ne una categoria ne un tag. Gli viene assegnato un contesto tramite la tabella 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)

La tabella term_taxonomy posiziona un termine in una tassonomia. Ciò è quello che rende un termine una categoria o un tag (o entrambe le cose). “term_id” è l’ID di un termine presente nella tabella terms. “taxonomy” designa la tassonomia nella quale il termine risiede. Le tassonomie predefinite sono “category”, “link_category” e “post_tag”. “term_taxonomy_id” è un ID unico per la coppia termine+tassonomia. Il resto dei campi forniscono informazioni riguardanti il termine nel contesto della tassonomia. Il campo “parent” tiene traccia delle relazioni gerarchiche fra i termini della tassonomia. “description” fornisce una descrizione specifica per la tassonomia del termine . “count” traccia quanti oggetti sono associati con la coppia termine+tassonomia. Data ad esempio una tassonomia “categoria”, “count” tiene traccia di quanti articoli sono in quella categoria.

L’ultima tabella, term_relationships, relaziona oggetti come articoli o link ad un term_taxonomy_id della tabella term_taxonomy.

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)

“object_id” è l’ID di un articolo o di un link. “term_taxonomy_id” è l’ID della tabella term_taxonomy che indica una coppia termine+tassonomia specifica.

La flessibilità dello schema e le relative API fanno si che i plugins possano aggiungere nuove tassonomie e tipi di oggetto in maniera estremamente semplice. Uno dei progetti del Summer of Code realizza proprio questo. Tale flessibilità ci permette anche di ritrovare facilmente gli oggetti associati ad un dato termine indipendentemente dalla tassonomia, recuperare tutti i termini da tutte le tassonomie per un dato oggetto e convertire tutte le actegorie in tag con una sola query.

Lo schema della tassonomia è nascosto dietro una API per la tassonomia abbastanza completa. Le API di categoria rimangono come una strato di compatibilità isopra le API di tassonomia. I plugin che usano le API di categoria non dovrebbero richiedere aggiornamenti con la 2.3. I plugin che eseguono query SQL direttamente sulla tabelle di categoria link2cat o post2cat purtroppo non funzioneranno.

Ecco quindi il nuovo schema. Darà problemi a qualche plugin nel breve termine, ma sul lungo termine ci permetterà di aggiungere nuove tassonomie che si rendessero necessarie senza la necessità di cambiare nuovamente la struttura del database a riguardo.

Hai qualche Domanda o vuoi Commentare?

8 commenti su “WordPress 2.3 Struttura Tassonomia

bravi, eh. peccato che con questo giochetto mi sia andata in fumo sia la tabella wp_categoriese sia wp_post2cat…

Reply

Dopo l’aggiornamento a wordpress 2.3 quando pubblico un post effettivamente viene pubblicato però dopo aver cliccato pubblica non mi ritorna la schermata di wordpress ma una pagina bianca con queste scritte di errore:

WordPress database error: [Table ‘linuxexperiences.wp_post2cat’ doesn’t exist]
SELECT cat_ID AS ID, MAX(post_modified) AS last_mod FROM `wp_posts` p LEFT JOIN `wp_post2cat` pc ON p.ID = pc.post_id LEFT JOIN `wp_categories` c ON pc.category_id = c.cat_ID WHERE post_status = ‘publish’ GROUP BY cat_ID

Warning: Cannot modify header information – headers already sent by (output started at /var/www/netsons.org/linuxexperiences/wp-includes/wp-db.php:160) in /var/www/netsons.org/linuxexperiences/wp-includes/pluggable.php on line 390

Come risolvo?

Reply

Inoltre ho pure cambiato dominio è non mi si sono i trackback dei post

Reply

Ok l’errore dei post era dovuto ad un plugin google-sitemap. Ma i trackback che non mi si sono aggiornati come faccio?

Reply

Va bene scusate se ho scritto ben due volte trackback penso invece siano pingback, per intenderci commenti a propri post dovuti a link ai medesimi scritti in altri post.
Per questi ho risolto a manina da phpmyadmin con qualche query.

Reply

[…] di un proprio sistema interno di tag. Sul sito ufficiale e su WordPress Italy ci sono post dettagliati che spiegano queste novità. L’aggiornamento, per quanto mi riguarda, è filato via liscio senza […]

[…] Copyright Tutti i contenuti di questo sito, ove non diversamente indicato, sono coperti da licenza Creative Commons. La riproduzione di tutto o parte i contenuti di questo sito potranno avvenire solo senza alcun scopo di lucro e dovranno riportare la fonte originaria ed un link a WordPress Italy e/o quella degli autori orginari. «« WordPress 2.3 Struttura Tassonomia […]

[…] release 2.3 di WordPress, questo nuovo schema rimpiazza le tabelle delle categorie post2cat e link2cat con tre nuove tabelle che risultano essere […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Archivi

Categorie