{"id":228757,"date":"2022-10-27T09:29:00","date_gmt":"2022-10-27T06:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228757"},"modified":"2022-11-09T04:10:34","modified_gmt":"2022-11-09T01:10:34","slug":"asociacion-de-metadatos-de-wordpress-entidades-relacionadas","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/asociacion-de-metadatos-de-wordpress-entidades-relacionadas\/","title":{"rendered":"Asociaci\u00f3n de Metadatos de WordPress: Entidades Relacionadas"},"content":{"rendered":"\n<p>En este punto, hemos cubierto c\u00f3mo crear las entidades dentro del complemento (que, como dijimos, es solo una palabra elegante para otra idea concreta). Es decir, tenemos un usuario y un tipo de publicaci\u00f3n personalizada, o un libro. Y aqu\u00ed es donde comenzamos a tomar las dos entidades separadas y las combinamos y trabajamos con lo que llamaremos asociaci\u00f3n de metadatos de WordPress.<\/p>\n<p>Pero antes de hacerlo, es importante comprender los dos tipos de metadatos con los que trabajaremos y las dos formas (o tres formas, seg\u00fan se mire) de c\u00f3mo podemos asociar los metadatos.<\/p>\n<p>Al igual que con el resto de las publicaciones de la serie, esto no pretende ser una inmersi\u00f3n profunda en la comprensi\u00f3n de cada una de las tablas o una inmersi\u00f3n profunda en cada una de las funciones de la API. En su lugar, vamos a examinar lo que est\u00e1 disponible, ponerlo en uso y dejar detalles m\u00e1s finos para publicaciones futuras (o quiz\u00e1s discusiones en los comentarios).<\/p>\n<h2>Asociaci\u00f3n de metadatos de WordPress<\/h2>\n<p>Los metadatos no son exclusivos de WordPress. Probablemente sepas esto. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Metadata\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Y a menudo se define como<\/a> :<\/p>\n<blockquote>\n<p>Informaci\u00f3n sobre informaci\u00f3n o datos sobre datos.<\/p>\n<\/blockquote>\n<p>Y esa es una buena manera de decirlo. WordPress ofrece algunas tablas de base de datos diferentes que podemos usar para proporcionar informaci\u00f3n sobre otros tipos de entidades dentro de WordPress. Vamos a usar un par de estos m\u00e1s adelante en esta publicaci\u00f3n, pero basta con decir que <a href=\"https:\/\/codex.wordpress.org\/Database_Description\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress ofrece<\/a> :<\/p>\n<ul>\n<li>comentar metadatos,<\/li>\n<li>publicar metadatos,<\/li>\n<li>t\u00e9rmino metadatos,<\/li>\n<li>y metadatos de usuario<\/li>\n<\/ul>\n<p>Y todo esto est\u00e1 disponible listo para usar.<\/p>\n<p>Una de las tablas de metadatos de WordPress.<\/p>\n<p>Las API para cada uno de estos son consistentes, lo que tambi\u00e9n es bueno. Pero, nuevamente, solo nos ocuparemos de un par de estos en el resto de esta publicaci\u00f3n.<\/p>\n<h3>1 Las tablas de metadatos<\/h3>\n<p>Para nuestro ejemplo, vamos a usar una o ambas de las siguientes dos tablas:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_postmeta\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_postmeta<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_usermeta\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_usermeta<\/a><\/li>\n<\/ol>\n<p>De acuerdo, en su instalaci\u00f3n, pueden tener un prefijo diferente, pero el sufijo es el mismo, y entiende la idea.<\/p>\n<p>En segundo lugar, usaremos las funciones API relacionadas para asociar nuestros metadatos. Los veremos en el c\u00f3digo cuando asociemos los datos entre nuestro usuario y el tipo de publicaci\u00f3n personalizada (o nuestro autor y nuestros libros si desea utilizar una terminolog\u00eda m\u00e1s precisa).<\/p>\n<p>Bien entonces. Toda esta primera parte de la publicaci\u00f3n solo est\u00e1 sentando las bases para las partes de la infraestructura subyacente de WordPress que vamos a utilizar. Habiendo dicho todo eso, veamos c\u00f3mo podemos convertir esto program\u00e1ticamente en algo un poco m\u00e1s \u00fatil.<\/p>\n<h3>2 Asociaci\u00f3n de metadatos<\/h3>\n<p>La idea detr\u00e1s de la asociaci\u00f3n de metadatos de WordPress suena m\u00e1s complicada de lo que es. Pi\u00e9nsalo de esta manera:<\/p>\n<ul>\n<li>Dadas dos tablas, \u00bfc\u00f3mo podemos compartir informaci\u00f3n entre dos entidades que permiten que una sepa sobre la otra?<\/li>\n<\/ul>\n<p>Por ejemplo, dado un usuario, \u00bfc\u00f3mo podemos informar a los metadatos del usuario sobre los metadatos de la publicaci\u00f3n? O, d\u00e1ndole la vuelta, \u00bfc\u00f3mo podemos permitir que los metadatos de las publicaciones sepan algo sobre los metadatos de los usuarios relacionados?<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167597-61e7a5d09f770.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167597-61e7a5d09f770.jpg\" alt=\"Asociaci\u00f3n de Metadatos de WordPress: Entidades Relacionadas\" ><\/a><\/p>\n<p>En un alto nivel, esto es realmente lo que estamos haciendo: estamos dejando que una entidad sepa que la otra existe y la estamos relacionando con la otra. O podr\u00eda ser al rev\u00e9s. Dependiendo de su implementaci\u00f3n, uno puede ser m\u00e1s beneficioso que el otro.<\/p>\n<h4>1 de ida<\/h4>\n<p>Cuando hablamos de crear asociaciones de WordPress unidireccionales, generalmente nos referimos a la idea de que solo una entidad es consciente de la otra. Esto significa que el usuario solo puede estar al tanto de la publicaci\u00f3n.<\/p>\n<p>Entonces, podr\u00edamos configurar despu\u00e9s de que se crea una publicaci\u00f3n, como que el usuario en cuesti\u00f3n conoce la publicaci\u00f3n que se <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c1245410fdf288edd11c9547711dd76c#file-01-post-aware-of-user-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">acaba de crear<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Using post title as the value, but it's just an example.\nadd_user_meta( $user_id, $post_id, $post_title );<\/code><\/pre>\n<p>O tal vez significa que la publicaci\u00f3n es consciente del usuario:<\/p>\n<pre><code>&lt;?php\n\n\/\/ User user email address a value but just an example.\nadd_post_meta( $post_id, $user_id, $email_address );<\/code><\/pre>\n<p>Pero no importa c\u00f3mo lo mires, la asociaci\u00f3n solo va en una direcci\u00f3n.<\/p>\n<p>Y aunque la relaci\u00f3n va en una direcci\u00f3n, no tiene por qu\u00e9 ser as\u00ed. Es decir, ambas entidades pueden ser conscientes una de la otra.<\/p>\n<h4>2 de dos v\u00edas<\/h4>\n<p>Dado que las API de metadatos son tan f\u00e1ciles y consistentes para trabajar con ellas, no es dif\u00edcil trabajar con ellas. Cada uno de los generalmente requiere al menos dos de los siguientes:<\/p>\n<ol>\n<li>una especie de ID con la que se relacionan los metadatos,<\/li>\n<li>una clave meta que se puede utilizar para buscar la informaci\u00f3n,<\/li>\n<li>un valor que almacena informaci\u00f3n asociada con el ID y la publicaci\u00f3n.<\/li>\n<\/ol>\n<p>Con respecto a qu\u00e9 ID y qu\u00e9 clave elige, a menudo depende de su implementaci\u00f3n, como hemos visto.<\/p>\n<p>Hasta este punto, hemos visto c\u00f3mo crear una asociaci\u00f3n unidireccional. Una asociaci\u00f3n bidireccional no es nada diferente. Es solo que en lugar de hacer que una entidad sea consciente de la otra, hacemos que ambas entidades sean conscientes de la otra:<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Using this association will give you the ability to query for information \n * both on posts and users and then work with the data accordingly.\n *\/\nadd_user_meta( $user_id, $post_id, $post_title );\nadd_post_meta( $post_id, $user_id, $email_address );\n<\/code><\/pre>\n<p>Pero esta no es una decisi\u00f3n que deba tomarse simplemente porque s\u00ed. En su lugar, vale la pena pensar en algunas de las razones por las que puede querer elegir uno u otro.<\/p>\n<h3>Pensando en el problema<\/h3>\n<p>Cuando se trata de resolver problemas como este, no existe una soluci\u00f3n definitiva en t\u00e9rminos de &quot;deber\u00edas resolverlo [de esta manera]&quot; de cualquier manera que sea. En cambio, debes hacerte preguntas como &quot;\u00bfqu\u00e9 hace que el forma m\u00e1s f\u00e1cil de administrar estos datos?&quot;<\/p>\n<p>Por ejemplo, si est\u00e1 interesado principalmente en la administraci\u00f3n de usuarios, quiz\u00e1s todo lo que necesite sea tener metadatos de usuario conscientes de cualquier entidad con la que est\u00e9n relacionados. De esta manera, cuando se elimine el usuario, tambi\u00e9n se asegurar\u00e1 de buscar las entidades relacionadas con \u00e9l a trav\u00e9s de la tabla de metadatos del usuario y eliminarlas tambi\u00e9n.<\/p>\n<p>Del mismo modo, quiz\u00e1s la misma funcionalidad ir\u00eda en ambos sentidos. Es decir, as\u00ed como desea asegurarse de que cuando se elimine un usuario, sus publicaciones tambi\u00e9n se eliminen, tambi\u00e9n puede desear que el usuario sea eliminado (o modificado) cada vez que se elimine una de sus publicaciones. Y si ese es el caso, entonces la asociaci\u00f3n bidireccional lo permite.<\/p>\n<p>Dado que tiene la ID de una publicaci\u00f3n determinada y la ID de un usuario determinado, as\u00ed como las claves de metadatos que ha especificado, es posible casi cualquier tipo de consulta que pueda visualizar a trav\u00e9s de la API de metadatos de WordPress o WP_Query <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o<\/a> incluso a trav\u00e9s <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de WP_User_Query.<\/a>.<\/p>\n<h2>El fin<\/h2>\n<p>En \u00faltima instancia, espero que esta serie haya brindado una idea de c\u00f3mo no solo crear asociaciones de metadatos de WordPress, sino tambi\u00e9n c\u00f3mo pensar de manera abstracta sobre los conceptos dentro de WordPress en relaci\u00f3n con la creaci\u00f3n de implementaciones de nivel superior en sus complementos y aplicaciones web.<\/p>\n<p>Para aquellos que est\u00e9n interesados, estoy considerando lanzar esta serie como un peque\u00f1o recurso en formato PDF junto con un complemento funcional para estudiar. Si esto es algo que le interesa hacer, reg\u00edstrese en la lista de correo aqu\u00ed y me asegurar\u00e9 de informarle cuando est\u00e9 listo; de lo contrario, use la informaci\u00f3n de la serie para avanzar y crear algo que valga la pena<\/p>\n<h3>\u00bfQuieren m\u00e1s?<\/h3>\n<h2>Publicaciones de la serie<\/h2>\n<ol>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Asociaci\u00f3n de metadatos de WordPress: c\u00f3mo hacerlo<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/creacion-programatica-de-usuarios-de-wordpress\/\" title=\"Creaci\u00f3n program\u00e1tica de usuarios de WordPress\">Creaci\u00f3n program\u00e1tica de usuarios de WordPress<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/tipos-de-publicaciones-de-wordpress-una-abstraccion-para-las-entidades\/\" title=\"Tipos de publicaciones de WordPress: una abstracci\u00f3n para las entidades\">Tipos de publicaciones de WordPress: una abstracci\u00f3n para las entidades<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association-entities\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Asociaci\u00f3n de Metadatos de WordPress: Entidades Relacionadas<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aqu\u00ed es donde comenzamos a tomar las dos entidades separadas y las combinamos y trabajamos con lo que llamaremos asociaci\u00f3n de metadatos de WordPress.<\/p>\n","protected":false},"author":1,"featured_media":220451,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,840,861],"tags":[1172],"class_list":["post-228757","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228757"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228757\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/220451"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}