{"id":228504,"date":"2022-10-27T09:28:00","date_gmt":"2022-10-27T06:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228504"},"modified":"2022-11-09T02:45:48","modified_gmt":"2022-11-08T23:45:48","slug":"wordpress-metadata-association-relaterande-enheter","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-metadata-association-relaterande-enheter\/","title":{"rendered":"WordPress Metadata Association: Relaterande enheter"},"content":{"rendered":"\n<p>Vid det h\u00e4r laget har vi t\u00e4ckt hur man skapar enheterna i pluginet (vilket, som vi har sagt, bara \u00e4r ett fint ord f\u00f6r en annan konkret id\u00e9). Vi har n\u00e4mligen en anv\u00e4ndare och en anpassad inl\u00e4ggstyp, eller en bok. Och det \u00e4r h\u00e4r vi b\u00f6rjar ta de tv\u00e5 separata enheterna och kombinera och arbeta med vad vi kallar WordPress-metadataf\u00f6rening.<\/p>\n<p>Men innan du g\u00f6r det \u00e4r det viktigt att f\u00f6rst\u00e5 de tv\u00e5 typer av metadata som vi kommer att arbeta med och de tv\u00e5 s\u00e4tten (eller tre s\u00e4tt, beroende p\u00e5 hur du ser p\u00e5 det) hur vi kan associera metadata.<\/p>\n<p>Som med resten av inl\u00e4ggen i serien, \u00e4r detta inte menat att vara en djupdykning i att f\u00f6rst\u00e5 var och en av tabellerna eller en djupdykning i var och en av API-funktionerna. Ist\u00e4llet kommer vi att unders\u00f6ka vad som finns tillg\u00e4ngligt, anv\u00e4nda dem och l\u00e4mna mer detaljerade detaljer f\u00f6r framtida inl\u00e4gg (eller kanske diskussioner i kommentarerna).<\/p>\n<h2>WordPress Metadata Association<\/h2>\n<p>Metadata \u00e4r inte exklusivt f\u00f6r WordPress. Du vet f\u00f6rmodligen detta. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Metadata\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Och det definieras ofta som<\/a> :<\/p>\n<blockquote>\n<p>Information om information eller data om data.<\/p>\n<\/blockquote>\n<p>Och det \u00e4r ett bra s\u00e4tt att uttrycka det. WordPress erbjuder n\u00e5gra olika databastabeller som vi kan anv\u00e4nda f\u00f6r att ge information om vissa andra typer av enheter inom WordPress. Vi kommer att anv\u00e4nda ett par av dessa senare i det h\u00e4r inl\u00e4gget, men det r\u00e4cker med att s\u00e4ga att <a href=\"https:\/\/codex.wordpress.org\/Database_Description\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress erbjuder<\/a> :<\/p>\n<ul>\n<li>kommentar metadata,<\/li>\n<li>posta metadata,<\/li>\n<li>term metadata,<\/li>\n<li>och anv\u00e4ndarmetadata<\/li>\n<\/ul>\n<p>Och allt detta \u00e4r tillg\u00e4ngligt direkt.<\/p>\n<p>En av WordPress-metadatatabellerna.<\/p>\n<p>API:erna f\u00f6r var och en av dessa \u00e4r konsekventa, vilket ocks\u00e5 \u00e4r trevligt. Men \u00e5terigen, vi kommer bara att bekymra oss om ett par av dessa under resten av det h\u00e4r inl\u00e4gget.<\/p>\n<h3>1 Metadatatabellerna<\/h3>\n<p>F\u00f6r v\u00e5rt exempel kommer vi att anv\u00e4nda en, eller b\u00e5da, av f\u00f6ljande tv\u00e5 tabeller:<\/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>Visst, i din installation kan de ha ett annat prefix, men suffixet \u00e4r detsamma, och du f\u00f6rst\u00e5r id\u00e9n.<\/p>\n<p>F\u00f6r det andra kommer vi att anv\u00e4nda de relaterade API-funktionerna f\u00f6r att associera v\u00e5ra metadata. Vi kommer att titta p\u00e5 dessa i kod n\u00e4r vi associerar data mellan v\u00e5r anv\u00e4ndare och den anpassade posttypen (eller v\u00e5r f\u00f6rfattare och v\u00e5ra b\u00f6cker om du vill anv\u00e4nda den mer exakta terminologin).<\/p>\n<p>Okej d\u00e5. Hela den h\u00e4r f\u00f6rsta delen av inl\u00e4gget l\u00e4gger bara lite grund f\u00f6r vilka delar av den underliggande WordPress-infrastrukturen vi kommer att anv\u00e4nda. Med allt detta sagt, l\u00e5t oss titta p\u00e5 hur vi programm\u00e4ssigt kan f\u00f6rvandla den h\u00e4r saken till n\u00e5got lite mer anv\u00e4ndbart.<\/p>\n<h3>2 Associera metadata<\/h3>\n<p>Id\u00e9n bakom WordPress metadataassociation l\u00e5ter mer komplicerad \u00e4n den \u00e4r. T\u00e4nk p\u00e5 det s\u00e5 h\u00e4r:<\/p>\n<ul>\n<li>Med tanke p\u00e5 tv\u00e5 tabeller, hur kan vi dela information mellan tv\u00e5 enheter som l\u00e5ter den ena veta om den andra?<\/li>\n<\/ul>\n<p>Till exempel, givet en anv\u00e4ndare, hur kan vi l\u00e5ta anv\u00e4ndarens metadata veta om postmetadata. Eller, f\u00f6r att v\u00e4nda p\u00e5 det, hur kan vi l\u00e5ta inl\u00e4ggsmetadata veta n\u00e5got om relaterad anv\u00e4ndarmetadata?<\/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=\"WordPress Metadata Association: Relaterande enheter\" ><\/a><\/p>\n<p>P\u00e5 h\u00f6g niv\u00e5 \u00e4r detta verkligen vad vi g\u00f6r: vi l\u00e5ter den ena enheten veta att den andra existerar och vi relaterar den till den andra. Eller s\u00e5 kan det g\u00e5 \u00e5t andra h\u00e5llet. Beroende p\u00e5 din implementering kan den ena vara mer f\u00f6rdelaktig \u00e4n den andra.<\/p>\n<h4>1 enkelriktad<\/h4>\n<p>N\u00e4r vi pratar om att skapa env\u00e4gs-WordPress-associationer talar vi vanligtvis om tanken att endast en enhet \u00e4r medveten om den andra. Det betyder att anv\u00e4ndaren kanske bara k\u00e4nner till inl\u00e4gget.<\/p>\n<p>S\u00e5 vi kan st\u00e4lla in efter att ett inl\u00e4gg har skapats, till exempel att anv\u00e4ndaren i fr\u00e5ga \u00e4r medveten om inl\u00e4gget som <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c1245410fdf288edd11c9547711dd76c#file-01-post-aware-of-user-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">just skapades<\/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>Eller kanske betyder det att inl\u00e4gget \u00e4r medvetet om anv\u00e4ndaren:<\/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>Men hur man \u00e4n ser p\u00e5 det s\u00e5 g\u00e5r f\u00f6reningen bara \u00e5t ett h\u00e5ll.<\/p>\n<p>Och \u00e4ven om f\u00f6rh\u00e5llandet g\u00e5r \u00e5t ett h\u00e5ll, beh\u00f6ver det inte vara s\u00e5. Det vill s\u00e4ga att b\u00e5da enheterna kan vara medvetna om varandra.<\/p>\n<h4>2 Tv\u00e5v\u00e4gs<\/h4>\n<p>Eftersom metadata-API:erna \u00e4r s\u00e5 l\u00e4tta och konsekventa att arbeta med \u00e4r det inte sv\u00e5rt att arbeta med dem. Var och en av dessa kr\u00e4ver vanligtvis minst tv\u00e5 av f\u00f6ljande:<\/p>\n<ol>\n<li>ett slags ID som metadata \u00e4r relaterad till,<\/li>\n<li>en meta-nyckel som kan anv\u00e4ndas f\u00f6r att sl\u00e5 upp informationen,<\/li>\n<li>ett v\u00e4rde som lagrar information som \u00e4r kopplad till ID:t och inl\u00e4gget.<\/li>\n<\/ol>\n<p>Ang\u00e5ende vilket ID och vilken nyckel du v\u00e4ljer beror ofta p\u00e5 din implementering, som vi har sett.<\/p>\n<p>Hittills har vi tittat p\u00e5 hur man skapar en enkelriktad association. En tv\u00e5v\u00e4gsf\u00f6rening \u00e4r inte annorlunda. Det \u00e4r bara snarare \u00e4n att g\u00f6ra en enhet medveten om den andra, vi g\u00f6r b\u00e5da enheterna medvetna om den andra:<\/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>Men det h\u00e4r \u00e4r inte ett beslut som b\u00f6r fattas bara f\u00f6r sakens skull. Ist\u00e4llet \u00e4r det v\u00e4rt att fundera igenom lite av anledningen till att du kanske vill v\u00e4lja det ena eller det andra.<\/p>\n<h3>Att t\u00e4nka igenom problemet<\/h3>\n<p>N\u00e4r det g\u00e4ller att l\u00f6sa s\u00e5dana h\u00e4r problem, finns det ingen definitiv l\u00f6sning i termer av &quot;du borde definitivt g\u00f6ra det [p\u00e5 det h\u00e4r s\u00e4ttet]&quot; vilket s\u00e4tt det \u00e4n kan vara. Ist\u00e4llet m\u00e5ste du st\u00e4lla dig sj\u00e4lv fr\u00e5gor som &quot;vad g\u00f6r f\u00f6r enklaste s\u00e4ttet att hantera denna data?&quot;<\/p>\n<p>Till exempel, om du fr\u00e4mst \u00e4r intresserad av anv\u00e4ndarhantering, kanske allt du beh\u00f6ver \u00e4r att ha anv\u00e4ndarmetadata medveten om vilken enhet den \u00e4r relaterad till. P\u00e5 s\u00e5 s\u00e4tt, n\u00e4r anv\u00e4ndaren raderas, ser du ocks\u00e5 till att sl\u00e5 upp entiteterna som \u00e4r relaterade till den via anv\u00e4ndarmetadatatabellen och radera dem ocks\u00e5.<\/p>\n<p>P\u00e5 samma s\u00e4tt skulle kanske samma funktionalitet g\u00e5 \u00e5t b\u00e5da h\u00e5llen. Det vill s\u00e4ga, precis som du vill f\u00f6rs\u00e4kra dig om att n\u00e4r en anv\u00e4ndare raderas, att hans eller hennes inl\u00e4gg ocks\u00e5 raderas, kan du ocks\u00e5 vilja att anv\u00e4ndaren tas bort (eller modifieras) n\u00e4r ett av hans\/hennes inl\u00e4gg tas bort. Och om s\u00e5 \u00e4r fallet, s\u00e5 till\u00e5ter tv\u00e5v\u00e4gsf\u00f6reningen det.<\/p>\n<p>Eftersom du har ID f\u00f6r ett givet inl\u00e4gg och ID f\u00f6r en given anv\u00e4ndare samt meta-nycklarna du har angett, \u00e4r n\u00e4stan alla typer av fr\u00e5gor som du kan avbilda antingen via WordPress metadata API eller <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a> eller till och med via <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a> m\u00f6jliga .<\/p>\n<h2>Slutet<\/h2>\n<p>I slut\u00e4ndan hoppas jag att den h\u00e4r serien har gett lite insikt om hur man inte bara skapar WordPress-metadataassociationer utan ocks\u00e5 hur man t\u00e4nker abstrakt om begrepp inom WordPress n\u00e4r det g\u00e4ller att skapa implementeringar p\u00e5 h\u00f6gre niv\u00e5er i dina plugins och dina webbapplikationer.<\/p>\n<p>F\u00f6r den som \u00e4r intresserad \u00f6verv\u00e4ger jag att sl\u00e4ppa den h\u00e4r serien som en liten resurs i PDF-format tillsammans med ett fungerande plugin att studera. Om det h\u00e4r \u00e4r n\u00e5got du \u00e4r intresserad av att g\u00f6ra, v\u00e4nligen registrera dig f\u00f6r e-postlistan h\u00e4r, s\u00e5 kommer jag att meddela dig n\u00e4r det \u00e4r klart; annars, anv\u00e4nd informationen i serien f\u00f6r att g\u00e5 vidare och skapa n\u00e5got v\u00e4rt<\/p>\n<h3>Vill ha mer?<\/h3>\n<h2>Serie inl\u00e4gg<\/h2>\n<ol>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Metadata Association: Hur man g\u00f6r det<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/skapa-wordpress-anvaendare-programmerat\/\" title=\"Skapa WordPress-anv\u00e4ndare programmerat\">Skapa WordPress-anv\u00e4ndare programmerat<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-inlaeggstyper-en-abstraktion-foer-enheter\/\" title=\"WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter\">WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/wordpress-metadata-association-entities\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Metadata Association: Relaterande enheter<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det \u00e4r h\u00e4r vi b\u00f6rjar ta de tv\u00e5 separata enheterna och kombinera och arbeta med vad vi kallar WordPress-metadataf\u00f6rening.<\/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":[848,901,724,868],"tags":[1173],"class_list":["post-228504","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228504"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220451"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}