Was ist der Unterschied zwischen term_id und term_taxonomy_id?

20

Der Titel sagt schon alles. Momentan erhalte ich in meinen benutzerdefinierten Taxonomien die Begriffe mit der Bezeichnung id und dem Taxonomienamen.

Ich dachte, diese Frage wäre schon einmal gestellt worden, kann sie aber nirgendwo finden! Also dachte ich würde fragen und sehen, ob jemand irgendwelche Antworten hat.

Daithí
quelle

Antworten:

21

Wenn Sie einen Blick in die Wordpress-Dokumentation werfen, finden Sie Wordpress-Taxonomien

  • term_id ist die ID eines Terms in der Terms-Tabelle
  • term_taxonomy_id ist eine eindeutige ID für das Begriffs- + Taxonomiepaar.
Juan Ramón
quelle
Würde das Manipulieren und Greifen von Begriffen, die nur auf term_id basieren, dann keine Duplikate verursachen?
Daithí
1
eigentlich nur die letzte Frage beantwortet. Schauen Sie sich die Tabelle wp_terms an und yep, nur term_id zu verwenden, ist sicher. Vielen Dank für Ihre Antwort @ Juan
Daithí
2
Nur eine Anmerkung, dass in WordPress 4.2 alle Begriffe aufgeteilt wurden , was bedeutet, dass jeder Begriff term_idnur einmal in der term_taxonomyTabelle vorkommt (bevor die Spalte nicht eindeutig war und Begriffe taxonomisch geteilt werden konnten). Dies könnte sich basierend auf der Taxonomie-Roadmap in Zukunft weiterentwickeln . Ein Teil davon besteht darin , den Begriff und die Begriffstaxonomietabellen zu kombinieren .
JD
11

Der Kodex sagt:

  • term_id ist die ID eines Terms in der Terms-Tabelle
  • term_taxonomy_id ist eine eindeutige ID für das Begriffs- + Taxonomiepaar

Was bedeutet das?

Ein Begriff ist ein Wort. Es kann zu einer Taxonomie wie Tags, Kategorien oder einer benutzerdefinierten Taxonomie gehören. Die Sache ist: Es kann mehrere Taxonomien geben, die den gleichen Begriff enthalten.

Nehmen wir an, Sie haben einen Begriff namens „Mast“. Dieses Wort hat eine ID-Nummer. Dies ist die term_id. Es kommt nicht darauf an, wie dieses Wort verwendet wird, dh in welchen Taxonomien der Begriff vorkommt.

Das Wort „Mast“ als Post-Tag hat jetzt auch eine Nummer. Dies ist die term_taxonomy_id. Es entspricht dem Post-Tag „Mast“.

Vielleicht haben Sie auch eine Kategorie namens "Mast". Während die term_id identisch ist, unterscheidet sich die term_taxonomy_id für die Kategorie "Mast".

Ken.shinde
quelle
5

Da dies Teil eines größeren Verständnisses des Designs ist, werde ich es als Ganzes beschreiben ... :)

In WP 4.5.3 gibt es noch alle diese Tabellen (ich werde ohne Präfix darüber sprechen ):

  • Beiträge
  • term_relationships
  • term_taxonomy
  • Begriffe

Der Pfad zum Abrufen der lesbaren Namen der Post-Terms geht durch alle.

Posts,
deren Hauptidentifikator hier ist ID- eine ID eines Posts (jeglicher Art)

term_relationships
speichert Paare von:
object_id- kann sein posts.ID(aber nicht nicht sein müssen)
term_taxonomy_id- das ist NICHT - ID eines Begriffs (Kategorie) , sondern eine ID von BEZIEHUNG zwischen einer Laufzeit (Kategorie) und Taxonomie ( „Kategorie - Typ“)

term_taxonomy
der Hauptidentifikator ist term_taxonomy_idhier oben beschrieben ^^
andere wichtige Spalten:
term_id- eine ID eines Begriffs (Kategorie)
taxonomy- speichert die Taxonomie des Begriffs ("Kategorietyp")

Dies mag lustig erscheinen, aber die ursprüngliche Absicht war es, die Fähigkeit von Begriffen hinzuzufügen, mehr Taxonomien zu haben (was in einigen Fällen sinnvoll sein kann).

Begriffe
Der Hauptidentifikator hier ist die term_id- ID einer Kategorie.
Weitere wichtige Spalten hier sind:
name- lesbarer Kategoriename, z. B. "Musikgenres"
slug- der Slug eines Begriffs, der z. B. in einer URL verwendet werden kann

Das brutale Demonstrieren von SQL,
um alle veröffentlichten Posts und alle ihre Kategorien mit Kategorienamen zu erhalten,
könnte also so aussehen (fügen Sie Tabellen Präfixe hinzu, wenn Sie in Ihrer eigenen WP-Datenbank testen):

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
jave.web
quelle
2

Ein Begriff ist keine Kategorie oder ein Tag für sich. Der Kontext muss über die term_taxonomy-Tabelle angegeben werden.

Die Tabelle term_taxonomy platziert einen Begriff innerhalb einer Taxonomie. Dies macht einen Begriff zu einer Kategorie , einem Tag oder einem Teil einer benutzerdefinierten Taxonomie (oder einer Kombination von Taxonomien).

term_id ist die ID eines Begriffs in der Begriffstabelle.

term_taxonomy_id ist eine eindeutige ID für das Begriffs- + Taxonomiepaar.

Das term_idist immer so einzigartig wie das term_taxonomy_id. Beide haben eine Auto Incrementin der Tabellenstruktur.

Die Tabelle wp_term_taxonomystellt sicher , zum Beispiel , dass eine Kategorie erstellt wird, so Wordpress damit zB WooCommerce Anwendungen beeinträchtigen können: product_tag, product_type, product_cat, alle von ihnen sind die so genannten benutzerdefinierten Taxonomien. Diese Tabelle bindet auch die übergeordnete / untergeordnete Struktur. Mit seiner Säule parent.

Die abschließende Tabelle term_relationships verknüpft Objekte wie Beiträge oder Links zu einer term_taxonomy_id aus der term_taxonomy-Tabelle.

Wenn wir Woocommerce erneut als Beispiel auswählen, verknüpft diese Tabelle den Beitragstyp productsmit seiner Taxonomie product_cat, die einen Namen enthält, z. B. Computer, der natürlich aus der Tabelle abgerufen wird wp_terms. Diese Tabelle enthält die term_id, name, slugund term_group. (term_group habe ich persönlich noch nie benutzt)

Hoffentlich verdeutlicht das oben Gesagte die Unterschiede und wie Wordpress diese Tabellen verwendet.

Rens Tillmann
quelle