Quelle est la différence entre term_id et term_taxonomy_id

20

Le titre dit tout. En ce moment dans mes taxonomies personnalisées, j'obtiens les termes en utilisant le terme id et le nom de taxonomie.

Je pensais que cette question aurait déjà été posée, mais je ne la trouve nulle part! Alors j'ai juste pensé demander et voir si quelqu'un avait des réponses.

Daithí
la source

Réponses:

21

Si vous jetez un œil à la documentation Wordpress, vous trouverez des taxonomies Wordpress

  • term_id est l'ID d'un terme dans la table des termes
  • term_taxonomy_id est un ID unique pour la paire terme + taxonomie.
Juan Ramón
la source
donc manipuler et saisir des termes basés uniquement sur le term_id ne provoquerait pas de doublons alors?
Daithí
1
en fait vient de répondre à cette dernière question. J'ai jeté un œil à la table wp_terms et yep en utilisant seulement le term_id est sûr. Merci pour votre réponse @Juan
Daithí
2
Juste une note que dans WordPress 4.2, tous les termes étaient divisés , ce qui signifie que chacun term_idn'apparaîtra qu'une seule fois dans le term_taxonomytableau (avant que la colonne ne soit unique et que les termes puissent être partagés entre les taxonomies). Cela pourrait continuer d'évoluer à l'avenir, sur la base de la feuille de route de la taxonomie . Une partie de cela consiste à combiner les termes et les tables de taxonomie des termes .
JD
11

Le Codex dit:

  • term_id est l'ID d'un terme dans la table des termes
  • term_taxonomy_id est un ID unique pour la paire terme + taxonomie

Qu'est-ce que ça veut dire?

Un terme est un mot. Il peut appartenir à une taxonomie, telle que des balises, des catégories ou une taxonomie personnalisée. Le fait est qu'il peut y avoir plusieurs taxonomies contenant le même terme.

Disons que vous avez un terme appelé «engraissement». Ce mot a un numéro d'identification. C'est le term_id. Cela ne dépend pas de la façon dont ce mot est utilisé, c'est-à-dire dans quelles taxonomies le terme apparaît.

Maintenant, le mot «engraissement» en tant que tag de publication a également un numéro. C'est le term_taxonomy_id. Il correspond à «la balise post« engraissement »».

Vous avez peut-être aussi une catégorie appelée «engraissement». Alors que le term_id est le même, le term_taxonomy_id pour «la catégorie« engraissement »» est différent.

Ken.shinde
la source
5

Comme cela fait partie d'une meilleure compréhension du design, je vais le décrire dans son ensemble ... :)

Dans WP 4.5.3 il y a encore tous ces tableaux (j'en parlerai sans préfixe):

  • des postes
  • term_relationships
  • term_taxonomy
  • termes

Le chemin pour obtenir les noms lisibles des termes de publication passe par tous.

affiche
l'identifiant principal ici ID- l'identifiant d'un message (de tout type)

term_relationships
stocke des paires de:
object_id- peut être posts.ID(mais ne doit pas l' être)
term_taxonomy_id- ce n'est PAS l' identifiant d'un terme (catégorie) mais un identifiant de RELATION entre un terme (catégorie) et la taxonomie ("type de catégorie")

term_taxonomy
le principal identifiant ici est term_taxonomy_iddécrit ci-dessus ^^
autres colonnes importantes:
term_id- un identifiant d'un terme (catégorie)
taxonomy- stocke la taxonomie du terme ("type de catégorie")

Celui-ci peut sembler drôle, mais l'intention initiale était d'ajouter la possibilité pour les termes d'avoir plus de taxonomies (ce qui, dans certains cas, peut avoir du sens).

termes
l'identifiant principal ici est le term_id- un identifiant d'une catégorie d'
autres colonnes importantes ici sont:
name- nom de catégorie lisible par exemple "Genres musicaux"
slug - le slug d'un terme utilisable par exemple dans l'URL

Ainsi, la démonstration brutale de SQL pour
obtenir tous les articles publiés et toutes leurs catégories avec les noms des catégories
pourrait ressembler à ceci (ajouter des préfixes aux tableaux lors des tests sur votre propre 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
la source
2

Un terme n'est pas une catégorie ou une balise en soi. Il doit être mis en contexte via la table term_taxonomy.

La table term_taxonomy place un terme dans une taxonomie. C'est ce qui fait d'un terme une catégorie , une balise ou une partie d'une taxonomie personnalisée (ou dans une combinaison de taxonomies).

term_id est l'ID d'un terme dans la table des termes.

term_taxonomy_id est un identifiant unique pour le couple terme + taxonomie.

Le term_idest toujours unique comme le term_taxonomy_id. Les deux ont un Auto Incrementdans la structure du tableau.

Le tableau wp_term_taxonomyassure par exemple qu'une catégorie est créée, de sorte wordpress peut interférer avec par exemple WooCommerce utilisations: product_tag, product_type, product_cat, ils sont tous les soi - disant taxonomies personnalisées. Ce tableau lie également la structure parent / enfants. Avec sa colonne parent.

La table finale, term_relationships, relie des objets tels que des publications ou des liens à un term_taxonomy_id de la table term_taxonomy.

Si nous choisissons à nouveau Woocommerce comme exemple, ce tableau relie le type de publication productsà leur taxonomie product_cat, qui contient un namy, par exemple Ordinateurs qui est bien sûr récupéré du tableau wp_terms. Ce tableau contient term_id, name, sluget term_group. (term_group que je n'ai jamais utilisé personnellement)

Espérons que ce qui précède clarifie un peu les différences et la façon dont Wordpress utilise ces tableaux.

Rens Tillmann
la source