Las relaciones de tabla (muchos-a-muchos) en WordPress

En base de datos de WP hay la relaciones uno-a-uno, uno-a-muchos y  de muchos-a-muchos donde la relación va en ambos sentidos. Esta es usada por WP en términos de taxonomía (incluyendo categorías y etiquetas ya que estos son simplemente taxonomías). Un post puede tener muchos términos asignados y un término pueden ser asignados a múltiples mensajes.

WordPress crea esta relación de la misma manera que cualquier otra base de datos: mediante el uso de una tabla intermedia que une las dos tablas con datos clave. En nuestro caso es la tabla wp_term_relationships , que une wp_posts  y   wp_term_taxonomy .

Se explica más fácilmente mirando en las dos tablas. La wp_postscontiene datos sobre cada post, mientras que la tabla wp_term_taxonomy contiene datos sobre cada término, incluyendo la taxonomía y su ID.

Para crear un enlace entre un término en wp_term_taxonomy y un post en wp_posts, WP crea un registro en wp_term_relationships, que incluye el post_id y el term_id (almacenados como object_id y term_taxonomy_id, respectivamente, en wp_term_relationships). Esto significa que la wp_term_relationships puede incluir varios registros para cada post y varios registros para cada término, la creación de la relación de muchos a muchos.

El siguiente diagrama muestra cómo funciona:

relación muchos-a-muchos
En el ejemplo anterior, los mensajes tienen las siguientes relaciones:
  • post1 tiene los términos 1 y 3
  • post 2 tiene el 2
  • post 3 tiene el 4
  • post 4 tiene los términos 1 y 3

También podría mirar de la otra manera: el termino 3 se refiere a los post 1 y 4.

Sin embargo las cosas no terminan ahí. Hay una cuarta tabla, la wp_terms. Esta tiene datos sobre cada término: nombre, slug y la descripción para cada término. Cada término tiene sólo un registro en  wp_terms, por lo que la relación entre este y la wp_term_taxonomy es en realidad uno-a-uno. Teóricamente hablando, no hay razón para que estos datos no se realizarsen en wp_term_taxonomy, pero no es así.