Jaka jest różnica między term_id a term_taxonomy_id

20

Tytuł mówi wszystko. W tej chwili w moich niestandardowych systematykach używam terminów id i nazwa systematyki.

Myślałem, że to pytanie zostanie zadane wcześniej, ale nigdzie nie można go znaleźć! Więc pomyślałem, że zapytam i zobaczę, czy ktoś ma jakieś odpowiedzi.

Daithí
źródło

Odpowiedzi:

21

Jeśli zajrzysz do dokumentacji Wordpress, znajdziesz taksonomie Wordpress

  • term_id to identyfikator terminu w tabeli warunków
  • term_taxonomy_id jest unikalnym identyfikatorem terminu + para taksonomii.
Juan Ramón
źródło
więc manipulowanie i chwytanie warunków opartych tylko na term_id nie spowodowałoby duplikatów?
Daithí,
1
właściwie właśnie odpowiedziałem na to ostatnie pytanie. Zajrzałem do tabeli wp_terms i tak, używając tylko term_id jest bezpieczny. Dzięki za odpowiedź @Juan
Daithí,
2
Tylko uwaga, że ​​w WordPress 4.2 wszystkie warunki zostały podzielone , co oznacza, że ​​każde term_idwystąpi teraz tylko raz w term_taxonomytabeli (zanim kolumna nie była unikalna, a warunki mogły być współużytkowane przez taksonomie). To może nadal ewoluować w przyszłości, w oparciu o mapę drogową taksonomii . Jedną z nich jest połączenie tabel terminów i terminologii taksonomii .
JD
11

Kodeks mówi:

  • term_id to identyfikator terminu w tabeli warunków
  • term_taxonomy_id jest unikalnym identyfikatorem terminu + para taksonomii

Co to znaczy?

Termin to słowo. Może należeć do taksonomii, takiej jak tagi, kategorie lub taksonomia niestandardowa. Chodzi o to, że może istnieć kilka taksonomii zawierających ten sam termin.

Załóżmy, że masz termin „tucz”. To słowo ma numer identyfikacyjny. To jest term_id. Nie zależy to od sposobu użycia tego słowa, tj. W jakich taksonomiach pojawia się ten termin.

Teraz słowo „tucz” jako znacznik pocztowy również ma numer. To jest term_taxonomy_id. Odpowiada „znacznikowi pocztowemu„ tucz ”.

Może masz także kategorię „tucz”. Podczas gdy term_id jest taki sam, term_taxonomy_id dla „kategorii tucz” jest inny.

Ken.shinde
źródło
5

Ponieważ jest to część większego zrozumienia projektu, opiszę go jako całość ... :)

W WP 4.5.3 nadal są wszystkie te tabele (opowiem o nich bez prefiksu):

  • posty
  • Term_relationships
  • termin_taksonomia
  • warunki

Ścieżka do uzyskania czytelnych nazw terminów prowadzi przez wszystkie.

publikuje
tutaj główny identyfikator ID- identyfikator posta (dowolnego typu)

term_relationships
przechowuje pary:
object_id- może być posts.ID(ale nie musi)
term_taxonomy_id- NIE jest to identyfikator terminu (kategoria), ale identyfikator RELACJI między terminem (kategoria) a taksonomią („typ kategorii”)

term_taxonomy
główny identyfikator tutaj jest term_taxonomy_idopisany powyżej ^^
inne ważne kolumny:
term_id- identyfikator terminu (kategoria)
taxonomy- przechowuje taksonomię terminu („typ kategorii”)

To może wydawać się zabawne, ale początkowo zamierzano dodać możliwość, aby terminy miały więcej taksonomii (co w niektórych przypadkach może mieć sens).

terminy
głównym identyfikatorem tutaj jest term_id- identyfikator kategorii,
inne ważne kolumny to:
name- czytelna nazwa kategorii, np. „Gatunki muzyczne”
slug- informacja o użytkowniku, np. w adresie URL

Tak więc brutalne demonstrowanie SQL, aby
uzyskać wszystkie opublikowane posty i wszystkie ich kategorie z nazwami kategorii,
może wyglądać tak (dodaj prefiksy do tabel podczas testowania na własnej WP DB):

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
źródło
2

Termin sam w sobie nie jest kategorią ani znacznikiem. Należy podać kontekst za pomocą tabeli term_taxonomy.

Tabela term_taksonomia umieszcza termin w taksonomii. Z tego powodu termin jest kategorią , znacznikiem lub częścią niestandardowej taksonomii (lub kombinacji taksonomii).

term_id to identyfikator terminu w tabeli warunków.

term_taxonomy_id jest unikalnym identyfikatorem terminu + para taksonomii.

term_idJest zawsze wyjątkowy podobnie jak term_taxonomy_id. Oba mają Auto Incrementstrukturę tabel.

Tabela wp_term_taxonomydba na przykład, że kategoria jest tworzony, więc wordpress może kolidować z nim np woocommerce zastosowań: product_tag, product_type, product_cat, wszystkie z nich są tak zwane niestandardowe taksonomii. Ta tabela również wiąże strukturę nadrzędną / podrzędną. Z jego kolumną parent.

Ostatnia tabela, term_relationships, odnosi obiekty, takie jak posty lub linki, do term_taxonomy_id z tabeli term_taxonomy.

Jeśli ponownie wybierzemy Woocommerce jako przykład, ta tabela łączy typ postu productsz ich taksonomią product_cat, która zawiera pewną liczbę np. Komputerów, które są oczywiście pobierane z tabeli wp_terms. Tabela ta zawiera term_id, name, slugi term_group. (term_group, której osobiście nigdy nie użyłem)

Mam nadzieję, że powyższe uwidacznia nieco więcej na temat różnic i sposobu, w jaki Wordpress używa tych tabel.

Rens Tillmann
źródło