Care este diferența dintre term_id și term_taxonomy_id

2 ian. 2012, 17:15:54
Vizualizări: 31.2K
Voturi: 39

Titlul spune totul. În prezent, în taxonomiile mele personalizate, obțin termenii folosind ID-ul termenului și numele taxonomiei.

M-am gândit că această întrebare ar fi fost pusă înainte, dar nu o pot găsi nicăieri! Așa că m-am gândit să întreb și să văd dacă cineva are vreun răspuns.

0
Toate răspunsurile la întrebare 5
4
35

Dacă aruncați o privire în documentația WordPress, veți găsi Taxonomiile WordPress

  • term_id este ID-ul unui termen din tabela de termeni
  • term_taxonomy_id este un ID unic pentru perechea termen + taxonomie.
2 ian. 2012 17:35:34
Comentarii

deci manipularea și extragerea termenilor bazată doar pe term_id nu ar provoca duplicate atunci?

Daithí Daithí
2 ian. 2012 20:51:29

de fapt tocmai am răspuns la ultima întrebare. Am verificat tabela wp_terms și da, folosirea doar a term_id este sigură. Mulțumesc pentru răspuns, @Juan

Daithí Daithí
2 ian. 2012 20:55:57

Doar o notă că în WordPress 4.2 toți termenii au fost separați, ceea ce înseamnă că fiecare term_id va apărea acum doar o singură dată în tabela term_taxonomy (înainte coloana nu era unică și termenii puteau fi partajați între taxonomii). Acest lucru poate continua să evolueze în viitor, bazat pe planul de taxonomie. O parte din acesta este combinarea tabelelor term și term taxonomy.

J.D. J.D.
19 apr. 2016 22:04:32

@J.D. atât de enervant că după 8 ani acele tabele încă nu au fost combinate

Steve Moretz Steve Moretz
23 nov. 2022 11:27:59
0
19

Codex spune:

  • term_id este ID-ul unui termen din tabelul terms
  • term_taxonomy_id este un ID unic pentru perechea termen+taxonomie

Ce înseamnă asta?

Un termen este un cuvânt. Acesta poate aparține unei taxonomii, cum ar fi etichete, categorii sau o taxonomie personalizată. Ideea este: pot exista mai multe taxonomii care conțin același termen.

Să presupunem că ai un termen numit "îngrășare". Acest cuvânt are un număr de identificare. Acesta este term_id. Nu depinde de modul în care este folosit acest cuvânt, adică în ce taxonomii apare termenul.

Acum, cuvântul "îngrășare" ca etichetă de articol are și el un număr. Acesta este term_taxonomy_id. Acesta corespunde "etichetei de articol 'îngrășare'".

Poate ai și o categorie numită "îngrășare". În timp ce term_id este același, term_taxonomy_id pentru "categoria 'îngrășare'" este diferit.

24 iun. 2016 06:51:25
1
11

Deoarece aceasta face parte dintr-o înțelegere mai amplă a design-ului, o voi descrie în întregime... :)

În WordPress 4.5.3 există încă toate aceste tabele (voi vorbi despre ele fără prefix):

  • posts
  • term_relationships
  • term_taxonomy
  • terms

Calea pentru a obține numele lizibile ale termenilor unui post trece prin toate acestea.

posts
identificatorul principal aici este ID - un ID al unui post (de orice tip)

term_relationships
stochează perechi de:
object_id - poate fi posts.ID (dar nu trebuie să fie)
term_taxonomy_id - acesta NU este ID-ul unui termen (categorie) ci un ID al RELATIEI dintre un termen (categorie) și o taxonomie ("tip de categorie")

term_taxonomy
identificatorul principal aici este term_taxonomy_id descris mai sus ^^
alte coloane importante:
term_id - un ID al unui termen (categorie)
taxonomy - stochează taxonomia termenului ("tip de categorie")

Aceasta poate părea amuzantă, dar intenția inițială a fost de a adăuga posibilitatea ca termenii să aibă mai multe taxonomii (ceea ce în anumite cazuri poate avea sens).

terms
identificatorul principal aici este term_id - un ID al unei categorii
alte coloane importante aici sunt:
name - numele lizibil al categoriei, de ex. "Genuri muzicale"
slug - slug-ul termenului, utilizabil de ex. în URL

Deci, un exemplu brutal de SQL pentru a
obține toate postările publicate și toate categoriile lor cu numele categoriilor
ar putea arăta astfel (adăugați prefixe la tabele când testați pe propria bază de date WP):

SELECT * FROM
posts #obține postările
LEFT JOIN
term_relationships #obține relațiile postărilor cu term_taxonomies
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #obține term_ids 
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #în final, obține numele termenilor
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
    (posts.post_status='publish') 
    #opțional, puteți filtra după un anumit post_type:
    #AND
    #(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC
23 iun. 2016 22:53:59
Comentarii

Cea mai clară explicație de pe acest thread... Mulțumesc!

Andrew Odri Andrew Odri
15 sept. 2021 22:09:39
0

Un termen nu este o categorie sau un tag în sine. Acesta trebuie să primească context prin intermediul tabelului term_taxonomy.

Tabelul term_taxonomy plasează un termen într-o taxonomie. Aceasta este ceea ce face ca un termen să fie o categorie, un tag sau parte a unei taxonomii personalizate (sau într-o combinație de taxonomii).

term_id este ID-ul unui termen din tabelul terms.

term_taxonomy_id este un ID unic pentru perechea termen+taxonomie.

Codul term_id este întotdeauna unic, la fel ca și term_taxonomy_id. Ambele au un Auto Increment în structura tabelului.

Tabelul wp_term_taxonomy se asigură, de exemplu, că o categorie este creată, astfel încât WordPress să poată interacționa cu ea. De exemplu, WooCommerce utilizează: product_tag, product_type, product_cat, toate acestea fiind așa-numitele taxonomii personalizate. Acest tabel stabilește și structura părinte/copil prin coloana sa parent.

Tabelul final, term_relationships, leagă obiecte precum postări sau link-uri de un term_taxonomy_id din tabelul term_taxonomy.

Dacă luăm din nou WooCommerce ca exemplu, acest tabel leagă tipul de postare products de taxonomia lor product_cat, care conține un nume, de exemplu "Computere", care este desigur preluat din tabelul wp_terms. Acest tabel conține term_id, name, slug și term_group. (personal, nu am folosit niciodată term_group)

Sper că cele de mai sus au clarificat puțin diferențele și modul în care WordPress utilizează aceste tabele.

17 nov. 2015 15:55:40
0

Articolul "Înțelegerea și lucrul cu taxonomii și termeni în WordPress" explică motivul pentru utilizarea a două tabele separate - wp_term și wp_term_taxonomy:

În multe instalări WordPress, va exista o singură înregistrare în tabelul wp_term_taxonomy pentru fiecare termen din tabelul wp_terms, dar în unele cazuri veți avea mai multe înregistrări pentru același termen. Acest lucru se întâmplă atunci când creați doi termeni cu același nume și slug în taxonomii diferite și înseamnă că puteți crea o interogare pentru a afișa articolele care conțin acel termen în mai multe taxonomii.

Aceasta înseamnă că relația dintre aceste două tabele este de tipul unu-la-multe: o înregistrare din tabelul wp_terms poate fi legată de mai multe înregistrări din tabelul wp_term_taxonomy, dar fiecare înregistrare din wp_term_taxonomy este legată de o singură înregistrare din wp_terms.

1 feb. 2020 10:41:59