Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Entender y Trabajar con las Relaciones Entre Datos en WordPress

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Understanding and Working with Data in WordPress .
Understanding and Working With Data in WordPress
Understanding and Working with Content Types in WordPress

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

En la primera parte de esta serie sobre los datos en WordPress, proporcioné una visión general sobre las tablas de la base de datos de WordPress y qué tablas se utilizan para almacenar los diferentes tipos de datos. En esta segunda parte, voy a describir cómo gestiona WordPress las relaciones entre los datos.

Como verás, WordPress usa tres tipos de relaciones entre datos - de uno-a-uno, de uno-a-varios y de varios-a-muchos. Voy a revisar cada uno de estos tipos y sus implicaciones para tu sitio web con WordPress.

Relaciones de Uno a Uno

La relación de un único dato a otro es la más sencilla de todas: significa simplemente que un registro se relaciona con otro. Este tipo de datos se almacenan generalmente dentro de una tabla (aunque no siempre, como veremos más adelante en este tutorial).

Algunos ejemplos de relaciones uno-a-uno en WordPress son los siguientes:

  • el ID de una entrada con su contenido
  • el título de la entrada y su contenido
  • el ID de la entrada y el slug de la misma
  • ID de un comentario y su contenido
  • el ID del usuario y su nombre

La lista podría continuar, pero la idea principal es que los dos registros almacenados en distintos campos de una fila en una tabla tienen una relación bidireccional de uno-a-uno.

Las relaciones de uno-a-uno, sin embargo, son las menos interesantes de las existentes en la base de datos. Por lo que sin más preámbulos vamos a pasar a un tipo de relación ampliamente empleada por WordPress, la de uno-a-muchos.

Relaciones de Uno-A-Muchos

La relación de uno con varios es muy habitual en las bases de datos y es lo que convierte a una base de datos el algo más potente que una tabla 'plana' como pueda ser una hoja de cálculo. Estas relaciones se dan cuando un registro tiene relación con más de un otro registro.

En WordPress, la mayoría de las relaciones del tipo uno-a-muchos se crean mediante un vínculo entre dos tablas de la base de datos, usando un identificador único que las une. Por ejemplo, el registro post_id será único para cada entrada que se almacene en la tabla wp_posts, pero también se utilizará en la tabla wp_comments para identificar en qué entrada se publicó cada comentario. Esto significa que cada valor post_id aparecerá sólo una vez en la tabla wp_posts, pero podría aparecer varias veces - o incluso no hacerlo - en la tabla wp_comments.

Algunos otros ejemplos en WordPress son:

  • las entradas y sus metadatos
  • las entradas y los usuarios
  • los usuarios y los metadatos de usuario
  • las taxonomías y los términos de la taxonomía

Una vez más, la lista es interminable. Como este es un tema importante en WordPress, echemos un vistazo a las relaciones de uno-a-varios con más detalle.

Relaciones de Uno-A-Muchos Relativas a las Entradas

La tabla que está conectada con otras en mayor medida es la tabla wp_posts y la mayoría de las relaciones que crean estas conexiones son relaciones de uno-a-muchos.

Como puedes ver en el siguiente diagrama, la tabla wp_posts está vinculada con otras cuatro:

Pero además, las entradas también pueden tener una relación de uno-a-muchos con otras entradas, en forma de adjuntos o páginas padre.

Echemos un vistazo a estas relaciones con más detalle.

Entrada-A-Entrada

Tal y como se explicó anteriormente, los datos almacenados en la tabla wp_posts pueden tener una relación de uno-a-muchos con otros datos en la misma tabla; sin embargo, esta relación no es entre lo que te imaginas, entre entradas, sino entre entradas y archivos adjuntos o entre unas páginas y otras. Después de todo, los archivos adjuntos y las páginas son tipos de entradas.

Un adjunto almacenado en la tabla wp_posts tendrá un registro en el campo post_parent, que será el ID de la entrada al que está conectado (¡mis disculpas por la reiteración!). Se trata de una relación de uno-con-muchos ya que cada adjunto sólo tendrá un padre, mientras que cada entrada podría tener muchos adjuntos. Esto se aplicará incluso si has usado el Media Manager para agregar un archivo adjunto en otra entrada - sólo la entrada en la que fue agregado originalmente será almacenada en la base de datos como su padre.

Las entradas también pueden tener una relación de uno-a-muchos con otras entradas cuando una página se especifica como padre de otra. El registro se almacena haciendo referencia a la página hija, en el campo post_parent - de nuevo otra vez será el post_id de la página padre. Esto es una relación uno-a-muchos ya que las páginas que ejercen como padre pueden tener muchas páginas hijas, pero las páginas hijas sólo pueden tener una página padre.

Al pensar en este tipo de relaciones entre entradas, es importante recordar que cuando estamos considerando la gestión de datos en WordPress, los posts no son aquello a lo que normalmente te podrías referir como entradas. También se incluyen las páginas, los adjuntos y otros tipos de posts, todos los cuales se almacenan en la tabla wp_posts.

Metadatos de Posts-A-Post

Los metadatos de los posts se almacenan en su propia tabla wp_postmeta. En esta tabla se incluyen cuatro únicos campos, para el post_id, para el meta_id, para la clave y para el valor. Un post puede tener muchos elementos relativos a metadatos sobre el post asociados a él, pero cada registro del metadato referente al post se vinculará a un único post.

Posts-A-Comentarios

Los comentarios también tienen su propia tabla, wp_comments. Cada comentario hará referencia a una sola entrada, mientras que cada entrada podrá tener múltiples comentarios relativos ella almacenados. Como con todas las otras tablas vinculadas a wp_posts, el campo post_id se utiliza para el vínculo (en el campo comment_post_id en wp_comments).

La tabla wp_comments tiene por defecto 15 campos, para almacenar datos sobre el autor, la dirección de correo electrónico del autor, el comentario en sí y su estado de moderación. También está vinculado a la tabla wp_users, tal y como veremos en la siguiente sección.

Los comentarios también tienen sus propios metadatos, almacenados en otra tabla, la cual explicaré dentro de poco.

Posts-A-Usuarios

Cada entrada está vinculada a la tabla wp_users a través del registro user_id, que se almacena en el campo post_author de wp_posts. Se trata de una relación de uno-a-muchos ya que cada entrada tiene un sólo autor, pero cada usuario puede ser autor de múltiples entradas.

La relación entre los mensajes y los usuarios es otra rom que entre posts y comentarios o metadatos porque su naturaleza es de un usuario, mensajes varios, no uno entradas múltiples comentarios o mete los registros de datos. Por esta razón el campo user_id proporciona el enlace en lugar del campo post_id.

Relaciones Uno-A-Muchos Que No Implican Entradas

También hay tres relaciones que son del tipo uno-a-muchos y no implican a los posts. Dos de éstas tienen que ver con los metadatos - la relación entre los comentarios y sus metadatos y entre los usuarios y sus metadatos.

Metadatos de Usuarios-A-Usuario

WordPress almacena metadatos adicionales sobre los usuarios en la tabla wp_usermeta. Se utiliza generalmente para datos no estándar sobre usuarios, por ejemplo metadatos sobre superadmins en una instalación multisitio y metadatos sobre los colores para la interfaz del escritorio que un usuario ha escogido en caso de no ser los predeterminados.

La mayoría de los datos sobre los usuarios serán almacenados en la tabla wp_users. Las dos tablas están relacionadas mediante el campo user_id y un registro de usuario tendrá varios elementos de metadatos asociados a él, mientras que cada metadato sólo se aplicará a un único usuario.

Metadatos Comentario-A-Comentario 

Nuevamente, la mayoría de los datos relativos a los comentarios se almacenan en la tabla wp_comments junto al propio comentario, mientras que la tabla de wp_commentmeta se utiliza para almacenar metadatos adicionales como puedan ser los datos creados por plugins como Akismet. La relación es la misma que se establece entre los usuarios y usermeta.

Comentarios-A-Usuarios

La relación uno-a-muchos final se da entre los comentarios y los usuarios. La tabla wp_comments incluye el campo user_id, que puede ser utilizado para almacenar el ID de usuario cuando un usuario con sesión iniciada publique un comentario. Ten en cuenta que este campo no es obligatorio para aquellos sitios en los que no se requiere que los usuarios hayan iniciado sesión para poder comentar.

Relaciones de Muchos-A-Muchos

El tipo final de relación de base de datos es la relación de uno-a-muchos, en donde las relaciones entre estos muchos se establecen en ambas direcciones. Esto se emplea solo en una situación en WordPress, para las relaciones entre los términos de taxonomía (entre lo que se incluyen las etiquetas y las categorías, ya que estas son simplemente taxonomías). Un posts puede tener muchos términos asignados y a su vez, un término puede ser asignado a múltiples posts.

WordPress crea esta relación de la misma manera que cualquier otra base de datos con relaciones de muchos-a-muchos: mediante una tabla intermedia que las une a las dos con los datos clave. Se trata de la tabla wp_term_relationships, que une la tabla wp_posts con la tabla wp_term_taxonomy.

Nota: Esta tabla vincula también la tabla wp_links con la tabla wp_term_taxonomy, como los enlaces se comportan prácticamente de la misma manera que las entradas - pronto pasaré a los enlaces.

Esto se explica más fácilmente observando primero las dos tablas periféricas. La tabla wp_posts contiene datos sobre cada entrada, mientras que la tabla wp_term_taxonomy contiene datos sobre cada término, la taxonomía en la que está y su ID.

Para crear un vínculo entre un término en la tabla wp_term_taxonomy y un puesto en la tabla wp_posts, WordPress crea un registro en la tabla wp_term_relationships, que incluye el post_id y el term_id (almacenado como object_id y term_taxonomy_id respectivamente en la tabla wp_term_relationships). Esto significa que la tabla wp_term_relationships puede incluir varios registros por cada post y varios registros para cada término, creando la relación muchos a muchos.

El siguiente diagrama muestra cómo funciona:

En el ejemplo anterior, los puestos tienen los siguientes términos:
  • post 1 tiene términos 1 y 3
  • post 2 tiene término 2
  • post 3 tiene término 4
  • post 4 tiene términos 1 y 3

Usted podría también lo mira la otra manera - por ejemplo, término 3 se refiere a puestos de 1 y 4.

Sin embargo las cosas no se detienen allí. Hay una cuarta tabla, la tabla wp_terms. Contiene datos acerca de cada término, a saber, el nombre, slug y la descripción de cada término. Cada término tiene sólo un registro en la tabla wp_terms, por lo que la relación entre la tabla wp_term_taxonomy y es en realidad uno a uno. Teóricamente hablando, no es necesario que estos datos no pudieran realizarse en la tabla wp_term_taxonomy, pero no es.

Una Nota Sobre Los Enlaces

Los enlaces o el blogroll, es una característica de WordPress que es en la actualidad mucho menos prominente de lo que una vez fue. De hecho, desde la versión 3.5 los enlaces han sido desactivados en el administrador de forma predeterminada; sin embargo, tienen su propia tabla: la tabla wp_links.

Esto es muy parecido a la tabla wp_posts. Después de todo, los enlaces son un tipo de contenido muy similar a las entradas) y tienen la misma relación de muchos-a-muchos mediante términos de taxonomía.

Resúmen

Como hemos visto, WordPress emplea varios tipos de relaciones para vincular datos en 10 de las 11 tablas de su base de datos. La única tabla que no he mencionado aquí es wp_options, ya que a no está vinculada a ninguna otra tabla, simplemente almacena datos sobre el sitio web, no sobre el contenido. Hablaré en detalle sobre ello más adelante en esta misma serie.

La comprensión de las relaciones uno-a-uno, uno-a-muchos o muchos-a-muchos en WordPress, te puede ayudar a identificar formas de manipular los datos y crear consultas personalizadas en tu tema y plugins.

En la siguiente parte de esta serie, hablaré de los tipos de contenido con más detalle, revisando los tipos de contenido que se almacenan en la base de datos de WordPress y las similitudes y diferencias entre ellos.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.