Qual é a diferença entre term_id e term_taxonomy_id


20

O título diz tudo. No momento, em minhas taxonomias personalizadas, estou recebendo os termos usando o termo id e nome da taxonomia.

Achei que essa pergunta já teria sido feita antes, mas não a encontra em lugar nenhum! Então, pensei em perguntar e ver se alguém tem alguma resposta.

Respostas:


21

Se você der uma olhada na documentação do Wordpress, encontrará Taxonomias do Wordpress

  • term_id é o ID de um termo na tabela de termos
  • term_taxonomy_id é um ID exclusivo para o par termo + taxonomia.

então manipular e capturar termos com base apenas no term_id não causaria duplicatas?
Daithí

11
na verdade, apenas respondi a última pergunta. De uma olhada na tabela wp_terms e sim, usando apenas o term_id é seguro. Obrigado pela sua resposta @Juan
Daithí

2
Apenas observe que no WordPress 4.2 todos os termos foram divididos , o que significa que cada term_idum agora ocorrerá apenas uma vez na term_taxonomytabela (antes da coluna não ser exclusiva e os termos poderem ser compartilhados entre taxonomias). Isso pode continuar evoluindo no futuro, com base no roteiro da taxonomia . Uma parte disso é combinar o termo e as tabelas de taxonomia de termos .
JD

11

O Codex diz:

  • term_id é o ID de um termo na tabela de termos
  • term_taxonomy_id é um ID exclusivo para o par termo + taxonomia

O que isto significa?

Um termo é uma palavra. Pode pertencer a uma taxonomia, como tags, categorias ou uma taxonomia customizada. A questão é: pode haver várias taxonomias contendo o mesmo termo.

Digamos que você tenha um termo chamado "engorda". Esta palavra tem um número de identificação. Este é o term_id. Não depende de como essa palavra é usada, ou seja, em quais taxonomias o termo aparece.

Agora, a palavra "engorda" como tag de postagem também tem um número. Este é o term_taxonomy_id. Corresponde à "tag post 'engorda'".

Talvez você também tenha uma categoria chamada "engorda". Embora o term_id seja o mesmo, o term_taxonomy_id para "a categoria 'engorda'" é diferente.


5

Como isso faz parte de uma maior compreensão do design, descreverei-o como um todo ... :)

No WP 4.5.3, ainda existem todas essas tabelas (falarei sobre elas sem prefixo):

  • Postagens
  • term_relationships
  • term_taxonomy
  • termos

O caminho para obter os nomes legíveis dos termos de postagem passa por todos eles.

publica
o identificador principal aqui ID- um ID de uma publicação (de qualquer tipo)

term_relationships
armazena pares de:
object_id- pode ser posts.ID(mas não precisa ser)
term_taxonomy_id- NÃO é o ID de um termo (categoria), mas um ID de RELACIONAMENTO entre um termo (categoria) e taxonomia ("tipo de categoria")

term_taxonomy,
o identificador principal aqui está term_taxonomy_iddescrito acima ^^
outras colunas importantes:
term_id- um ID de um termo (categoria)
taxonomy- armazena a taxonomia do termo ("tipo de categoria")

Este pode parecer engraçado, mas a intenção inicial era adicionar a capacidade de termos terem mais taxonomias (o que em alguns casos pode fazer sentido).

termos
o principal identificador aqui é o term_id- um ID de uma categoria
outras colunas importantes aqui são:
name - nome da categoria legível, por exemplo, "Gêneros de Música"
slug- a lesma de um termo utilizável, por exemplo, no URL

Portanto, o SQL brutal demonstrativo para
obter todas as postagens publicadas e todas as suas categorias com nomes de categorias
pode se parecer com isso (adicione prefixos às tabelas ao testar em seu próprio 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

2

Um termo não é uma categoria ou tag por si só. Ele deve receber contexto por meio da tabela term_taxonomy.

A tabela term_taxonomy coloca um termo dentro de uma taxonomia. É isso que faz de um termo uma categoria , uma tag ou parte de uma taxonomia personalizada (ou em uma combinação de taxonomias).

term_id é o ID de um termo na tabela de termos.

term_taxonomy_id é um ID exclusivo para o termo + par taxonomia.

O term_idé sempre único, assim como o term_taxonomy_id. Ambos têm uma Auto Incrementestrutura na tabela.

A tabela wp_term_taxonomytorna-se, por exemplo, que uma categoria é criada, então wordpress pode interferir com ele usa por exemplo WooCommerce: product_tag, product_type, product_cat, todos eles são os chamados taxonomias personalizadas. Esta tabela também liga a estrutura pai / filhos. Com sua coluna parent.

A tabela final, term_relationships, relaciona objetos como postagens ou links a um term_taxonomy_id da tabela term_taxonomy.

Se escolhermos novamente o Woocommerce como exemplo, esta tabela vinculará o tipo de postagem productsà taxonomia deles product_cat, que contém um nome, por exemplo, computadores, que é obviamente recuperado da tabela wp_terms. Esta tabela contém a term_id, name, sluge term_group. (term_group que pessoalmente nunca usei)

Espero que o exposto torne as coisas um pouco mais claras sobre as diferenças e como o Wordpress usa essas tabelas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.