Qual è la differenza tra term_id e term_taxonomy_id
Il titolo dice tutto. Al momento, nelle mie tassonomie personalizzate, sto recuperando i termini utilizzando l'ID del termine e il nome della tassonomia.
Pensavo che questa domanda fosse già stata posta prima, ma non riesco a trovarla da nessuna parte! Quindi ho pensato di chiedere e vedere se qualcuno ha delle risposte.
Se dai un'occhiata alla documentazione di Wordpress troverai Tassonomie di Wordpress
- term_id è l'ID di un termine nella tabella dei termini
- term_taxonomy_id è un ID univoco per la coppia termine + tassonomia.
quindi manipolare e recuperare i termini basandosi solo sul term_id non causerebbe duplicati allora?
Daithí
in realtà ho appena risposto all'ultima domanda. Ho dato un'occhiata alla tabella wp_terms e sì, usare solo il term_id è sicuro. Grazie per la tua risposta @Juan
Daithí
Giusto una nota che in WordPress 4.2 tutti i termini sono stati separati, il che significa che ogni term_id ora apparirà una sola volta nella tabella term_taxonomy (prima la colonna non era univoca e i termini potevano essere condivisi tra tassonomie). Questo potrebbe continuare a evolversi in futuro, in base alla roadmap delle tassonomie. Una parte di questo è combinare le tabelle dei termini e delle tassonomie.
J.D.
Il Codex dice:
- term_id è l'ID di un termine nella tabella terms
- term_taxonomy_id è un ID univoco per la coppia termine+tassonomia
Cosa significa?
Un termine è una parola. Può appartenere a una tassonomia, come tag, categorie o una tassonomia personalizzata. Il punto è: possono esserci diverse tassonomie che contengono lo stesso termine.
Supponiamo che tu abbia un termine chiamato "ingrassante". Questa parola ha un numero ID. Questo è il term_id. Non dipende da come questa parola viene utilizzata, cioè in quali tassonomie appare il termine.
Ora la parola "ingrassante" come tag di un post ha anche un numero. Questo è il term_taxonomy_id. Corrisponde a "il tag 'ingrassante'".
Forse hai anche una categoria chiamata "ingrassante". Mentre il term_id è lo stesso, il term_taxonomy_id per "la categoria 'ingrassante'" è diverso.
Poiché questo fa parte di una comprensione più ampia del design, lo descriverò nel suo insieme... :)
In WP 4.5.3 ci sono ancora tutte queste tabelle (ne parlerò senza prefisso):
- posts
- term_relationships
- term_taxonomy
- terms
Il percorso per ottenere i nomi leggibili dei termini dei post passa attraverso tutte queste tabelle.
posts
l'identificatore principale qui è ID - un id di un post (di qualsiasi tipo)
term_relationships
memorizza coppie di:
object_id - può essere posts.ID (ma non deve esserlo necessariamente)
term_taxonomy_id - questo NON è l'id di un termine (categoria) ma un id della RELAZIONE tra un termine (categoria) e una tassonomia ("tipo di categoria")
term_taxonomy
l'identificatore principale qui è term_taxonomy_id descritto sopra ^^
altre colonne importanti:
term_id - un id di un termine (categoria)
taxonomy - memorizza la tassonomia del termine ("tipo di categoria")
Questo potrebbe sembrare divertente, ma l'intenzione iniziale era aggiungere la capacità per i termini di avere più tassonomie (che in alcuni casi può avere senso).
terms
l'identificatore principale qui è il term_id - un id di una categoria
altre colonne importanti qui sono:
name - nome leggibile della categoria, ad esempio "Generi musicali"
slug - lo slug di un termine utilizzabile ad esempio negli URL
Quindi la brutale dimostrazione SQL per
ottenere tutti i post pubblicati e tutte le loro categorie con i nomi delle categorie
potrebbe essere questa (aggiungi i prefissi alle tabelle quando testi sul tuo database WP):
SELECT * FROM
posts #ottiene i post
LEFT JOIN
term_relationships #ottiene le relazioni dei post con term_taxonomies
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #ottiene gli term_ids
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #finalmente, ottiene i nomi dei termini
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
(posts.post_status='publish')
#opzionalmente puoi filtrare per un certo post_type:
#AND
#(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC
Un termine non è una categoria o un tag di per sé. Deve essere contestualizzato tramite la tabella term_taxonomy.
La tabella term_taxonomy assegna un termine a una tassonomia. Questo è ciò che rende un termine una categoria, un tag o parte di una tassonomia personalizzata (o in una combinazione di tassonomie).
term_idè l'ID di un termine nella tabella terms.
term_taxonomy_idè un ID univoco per la coppia termine+tassonomia.
Il term_id è sempre univoco così come il term_taxonomy_id.
Entrambi hanno un Auto Increment nella struttura della tabella.
La tabella wp_term_taxonomy assicura, ad esempio, che una categoria venga creata, in modo che WordPress possa interagirci. Ad esempio, WooCommerce utilizza: product_tag, product_type, product_cat, tutti loro sono le cosiddette tassonomie personalizzate.
Questa tabella stabilisce anche la struttura genitore/figlio. Con la sua colonna parent.
L'ultima tabella, term_relationships, collega oggetti come post o link a un term_taxonomy_id dalla tabella term_taxonomy.
Se prendiamo di nuovo WooCommerce come esempio, questa tabella collega il tipo di post products alla loro tassonomia product_cat, che contiene un nome, ad esempio Computer, che ovviamente è recuperato dalla tabella wp_terms. Questa tabella contiene term_id, name, slug e term_group. (term_group personalmente non l'ho mai usato)
Speriamo che quanto sopra renda le cose un po' più chiare riguardo alle differenze e a come WordPress utilizza queste tabelle.
L'articolo "Comprendere e lavorare con le tassonomie e i termini in WordPress" spiega il motivo per cui vengono utilizzate due tabelle separate - wp_term e wp_term_taxonomy:
In molte installazioni WordPress, ci sarà un record nella tabella
wp_term_taxonomyper ogni termine nella tabellawp_terms, ma in alcuni casi avrai più di un record per ogni termine. Questo accade quando crei due termini con lo stesso nome e slug in tassonomie diverse, e significa che potresti creare una query per visualizzare post con quel termine in più tassonomie.Ciò significa che la relazione tra queste due tabelle è uno-a-molti: un record nella tabella
wp_termspuò essere collegato a più record nella tabellawp_term_taxonomy, ma ogni record inwp_term_taxonomyè collegato a un solo record inwp_terms.