Qual è la differenza tra term_id e term_taxonomy_id


20

Il titolo dice tutto. Al momento nelle mie tassonomie personalizzate sto ottenendo i termini usando il termine id e il nome della tassonomia.

Pensavo che questa domanda sarebbe stata posta prima ma non la trovo da nessuna parte! Quindi ho pensato di chiedere e vedere se qualcuno ha delle risposte.

Risposte:


21

Se dai un'occhiata alla documentazione di Wordpress troverai le 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 afferrare termini basati solo su term_id non causerebbe duplicati allora?
Daithí,

1
in realtà ho appena risposto a quest'ultima domanda. Ho dato un'occhiata alla tabella wp_terms e sì, usando solo term_id è sicuro. Grazie per la tua risposta @Juan
Daithí

2
Solo una nota che in WordPress 4.2 tutti i termini sono stati divisi , il che significa che ciascuno di essi term_idverrà visualizzato una sola volta nella term_taxonomytabella (prima che la colonna non fosse univoca e che i termini potessero essere condivisi tra le tassonomie). Ciò potrebbe continuare ad evolversi in futuro, sulla base della tabella di marcia della tassonomia . Una parte di ciò è combinare il termine e il termine tabelle di tassonomia .
JD

11

Il Codice dice:

  • term_id è l'ID di un termine nella tabella dei termini
  • term_taxonomy_id è un ID univoco per la coppia termine + tassonomia

Cosa significa questo?

Un termine è una parola. Può appartenere a una tassonomia, ad esempio tag, categorie o tassonomia personalizzata. Il fatto è che possono esserci diverse tassonomie contenenti lo stesso termine.

Diciamo che hai un termine chiamato "ingrasso". Questa parola ha un numero ID. Questo è il term_id. Non dipende da come viene usata questa parola, cioè in quali tassonomie appare il termine.

Ora anche la parola "ingrasso" come tag post ha un numero. Questo è il term_taxonomy_id. Corrisponde al "tag post 'ingrasso'".

Forse hai anche una categoria chiamata "ingrasso". Mentre term_id è lo stesso, term_taxonomy_id per "la categoria 'ingrasso'" è diverso.


5

Poiché questa è una parte di una più ampia comprensione del design, lo descriverò come intero ... :)

In WP 4.5.3 ci sono ancora tutte queste tabelle (ne parlerò senza prefisso):

  • messaggi
  • term_relationships
  • term_taxonomy
  • condizioni

Il percorso per ottenere i nomi leggibili dei termini dei post li attraversa tutti.

pubblica
qui l'identificatore principale ID: un ID di un post (di qualsiasi tipo)

term_relationships
memorizza coppie di:
object_id- può essere posts.ID(ma non deve essere)
term_taxonomy_id- questo NON è un id di un termine (categoria) ma un id di RELATIONHIP tra un termine (categoria) e una tassonomia ("tipo di categoria")

term_taxonomy
l'identificatore principale qui è term_taxonomy_iddescritto sopra ^^
un'altra colonna importante:
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 quella di aggiungere la possibilità per i termini di avere più tassonomie (che in alcuni casi può avere senso).

termini
l'identificatore principale qui è il term_id- un id di una categoria,
altre colonne importanti qui sono:
name- nome della categoria leggibile, ad esempio "Generi musicali"
slug- la lumaca di un termine utilizzabile, ad esempio, nell'URL

Quindi il brutale dimostrativo di SQL per
ottenere tutti i post pubblicati e tutte le loro categorie con nomi di categorie
potrebbe apparire così (aggiungere prefissi alle tabelle quando si esegue il test sul proprio DB WP):

SELECT * FROM
posts #gets posts
LEFT JOIN
term_relationships #gets posts relationships to term_taxonomies
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #gets term_ids 
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #finally, gets terms' names
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
    (posts.post_status='publish') 
    #optionally you can filter by a certain post_type:
    #AND
    #(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC

2

Un termine non è una categoria o un tag a sé stante. Deve essere fornito il contesto tramite la tabella term_taxonomy.

La tabella term_taxonomy inserisce un termine all'interno di 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 dei termini.

term_taxonomy_id è un ID univoco per il termine + coppia tassonomia.

Il term_idè sempre unica, proprio come il term_taxonomy_id. Entrambi hanno una struttura Auto Incrementnella tabella.

La tabella wp_term_taxonomysi assicura per esempio che si crea una categoria, in modo da wordpress può interferire con esso utilizza ad esempio Woocommerce: product_tag, product_type, product_cat, tutti sono i cosiddetti tassonomie personalizzate. Questa tabella associa anche la struttura padre / figlio. Con la sua colonna parent.

La tabella finale, term_relationships, mette in relazione oggetti come post o collegamenti a un term_taxonomy_id dalla tabella term_taxonomy.

Se prendiamo di nuovo Woocommerce come esempio, questa tabella collega il tipo di post productsalla loro tassonomia product_cat, che contiene un namy ad es. Computer che viene ovviamente recuperato dalla tabella wp_terms. Questa tabella contiene il term_id, name, sluge term_group. (term_group che personalmente non ho mai usato)

Speriamo che quanto sopra renda le cose un po 'più chiare sulle differenze e su come Wordpress usa queste tabelle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.