¿Cuál es la diferencia entre term_id y term_taxonomía_id

20

El título lo dice todo. En este momento, en mis taxonomías personalizadas, obtengo los términos con el término id y nombre de la taxonomía.

¡Pensé que esta pregunta se habría hecho antes pero no la puedo encontrar en ningún lado! Así que pensé en preguntar y ver si alguien tiene alguna respuesta.

Daithí
fuente

Respuestas:

21

Si echa un vistazo a la documentación de Wordpress, encontrará Taxonomías de Wordpress

  • term_id es el ID de un término en la tabla de términos
  • term_taxonomy_id es un ID único para el par term + taxonomía.
Juan Ramón
fuente
¿Entonces manipular y agarrar términos basados ​​solo en el term_id no causaría duplicados?
Daithí
1
En realidad acabo de responder esa última pregunta. Eché un vistazo a la tabla wp_terms y sí, usar el term_id solo es seguro. Gracias por tu respuesta @Juan
Daithí
2
Solo una nota de que en WordPress 4.2 todos los términos se dividieron , lo que significa que cada uno term_idocurrirá solo una vez en la term_taxonomytabla (antes de que la columna no fuera única y los términos se pudieran compartir entre las taxonomías). Esto puede seguir evolucionando en el futuro, según la hoja de ruta de la taxonomía . Una parte de eso es combinar el término y las tablas de taxonomía de términos .
JD
11

El Codex dice:

  • term_id es el ID de un término en la tabla de términos
  • term_taxonomy_id es un ID único para el par term + taxonomía

¿Qué significa esto?

Un término es una palabra. Puede pertenecer a una taxonomía, como etiquetas, categorías o una taxonomía personalizada. La cuestión es: puede haber varias taxonomías que contienen el mismo término.

Digamos que tiene un término llamado "engorde". Esta palabra tiene un número de identificación. Este es el term_id. No depende de cómo se usa esta palabra, es decir, en qué taxonomías aparece el término.

Ahora la palabra "engorde" como etiqueta de publicación también tiene un número. Este es el term_taxonomía_id. Corresponde a "la etiqueta de publicación 'engorde'".

Quizás también tenga una categoría llamada "engorde". Si bien el term_id es el mismo, el term_taxonomy_id para "la categoría 'engorde'" es diferente.

Ken.shinde
fuente
5

Como esto es parte de una mayor comprensión del diseño, lo describiré como un todo ... :)

En WP 4.5.3 todavía hay todas estas tablas (hablaré de ellas sin prefijo):

  • publicaciones
  • term_relationships
  • term_taxonomía
  • condiciones

El camino para obtener los nombres legibles de los términos de publicación los atraviesa todos.

publica
el identificador principal aquí es ID: una identificación de una publicación (de cualquier tipo)

term_relationships
almacena pares de:
object_id- puede ser posts.ID(pero no tiene que serlo)
term_taxonomy_id- esto NO es un id de un término (categoría) sino un id de RELACIÓN entre un término (categoría) y una taxonomía ("tipo de categoría")

term_taxonomía
el identificador principal aquí se term_taxonomy_iddescribe arriba ^^
otras columnas importantes:
term_id- una identificación de un término (categoría)
taxonomy- almacena la taxonomía del término ("tipo de categoría")

Esto puede parecer divertido, pero la intención inicial era agregar la capacidad de los términos para tener más taxonomías (lo que en algunos casos puede tener sentido).

términos,
el identificador principal aquí es el term_id- una identificación de una categoría,
otras columnas importantes aquí son:
name- nombre de categoría legible, por ejemplo, "Géneros musicales"
slug- la babosa de un término utilizable, por ejemplo, en URL

Por lo tanto, la brutal demostración de SQL para
obtener todas las publicaciones publicadas y todas sus categorías con los nombres de las categorías
podría verse así (agregue prefijos a las tablas cuando realice pruebas en su propio 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
fuente
2

Un término no es una categoría o etiqueta por sí solo. Se le debe dar contexto a través de la tabla term_taxonomía.

La tabla term_taxonomía coloca un término dentro de una taxonomía. Esto es lo que hace que un término sea una categoría , una etiqueta o parte de una taxonomía personalizada (o en una combinación de taxonomías).

term_id es la ID de un término en la tabla de términos.

term_taxonomy_id es un ID único para el término + par de taxonomía.

El term_idsiempre es único al igual que el term_taxonomy_id. Ambos tienen una Auto Incrementestructura en la tabla.

La tabla wp_term_taxonomyse asegura de que, por ejemplo, se crea una categoría, por lo que puede interferir con wordpress Utiliza por ejemplo WooCommerce: product_tag, product_type, product_cat, todos ellos son los llamados taxonomías personalizadas. Esta tabla también une la estructura padre / hijo. Con su columna parent.

La tabla final, term_relationships, relaciona objetos como publicaciones o enlaces a un term_taxonomy_id de la tabla term_taxonomy.

Si volvemos a elegir Woocommerce como ejemplo, esta tabla vincula el tipo de publicación productsa su taxonomía product_cat, que contiene un nombre, por ejemplo, Computadoras que, por supuesto, se recupera de la tabla wp_terms. Esta tabla contiene el term_id, name, slugy term_group. (term_group que personalmente nunca he usado)

Esperemos que lo anterior aclare un poco más las diferencias y cómo Wordpress usa estas tablas.

Rens Tillmann
fuente