{"id":228496,"date":"2022-10-26T16:17:00","date_gmt":"2022-10-26T13:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228496"},"modified":"2022-11-09T02:45:53","modified_gmt":"2022-11-08T23:45:53","slug":"wordpress-inlaeggstyper-en-abstraktion-foer-enheter","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-inlaeggstyper-en-abstraktion-foer-enheter\/","title":{"rendered":"WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter"},"content":{"rendered":"\n<p>N\u00e4r programmerare pratar om entiteter talar de vanligtvis om ett koncept eller n\u00e5got som existerar inom ett system. Ibland \u00e4r det en klass, ibland \u00e4r det ett bibliotek eller beroende, eller s\u00e5 kan det vara n\u00e5got som liknar WordPress-inl\u00e4ggstyper.<\/p>\n<p>Om WordPress ska ses som en <a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">applikationsbas (mot ett ramverk)<\/a> \u00e4r det viktigt att t\u00e4nka p\u00e5 vissa funktioner p\u00e5 ett s\u00e4tt som kan behandlas som entiteter. I exemplet ovan \u00e4r en posttyp just det.<\/p>\n<p>N\u00e4r anpassade inl\u00e4ggstyper introducerades <a href=\"https:\/\/make.wordpress.org\/training\/handbook\/theme-school\/custom-post-types\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gav det oss ett s\u00e4tt<\/a> att introducera n\u00e5got annat \u00e4n sidor och inl\u00e4gg i applikationen. Nu kan vi implementera vilket koncept som helst \u2013 som en <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/fraaga-efter-typer-av-haendelseinlaegg-med-wp-query-och-haendelsekalendern\/\" title=\"h\u00e4ndelse\">h\u00e4ndelse<\/a> \u2013 och behandla det som sin egen enhet i systemet.<\/p>\n<p>Men n\u00e4r allt \u00e4r sagt och gjort sparas allt i inl\u00e4ggstabellen. Och det \u00e4r bra eftersom mjukvaruutveckling handlar om abstraktion. N\u00e4r vi implementerar WordPress-inl\u00e4ggstyper implementerar vi en abstraktion ovanp\u00e5 id\u00e9n med inl\u00e4gg.<\/p>\n<h2>WordPress-inl\u00e4ggstyper<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/skapa-wordpress-anvaendare-programmerat\/\" title=\"I det f\u00f6rra inl\u00e4gget\">I det f\u00f6rra inl\u00e4gget<\/a> gick jag igenom processen att skapa en anv\u00e4ndare som i slut\u00e4ndan kommer att associeras med n\u00e5gon enhet i WordPress-applikationen.<\/p>\n<ul>\n<li>Kanske \u00e4r han\/hon f\u00f6rfattaren till ett inl\u00e4gg,<\/li>\n<li>Kanske \u00e4r han\/hon s\u00e4ljaren av en produkt,<\/li>\n<li>Kanske \u00e4r han\/hon ber\u00e4ttaren av en ber\u00e4ttelse,<\/li>\n<li>Eller vad du nu kan t\u00e4nka dig.<\/li>\n<\/ul>\n<p>M\u00f6jligheterna \u00e4r o\u00e4ndliga. Men innan vi pratar om hur man skapar en association mellan de tv\u00e5 enheterna \u2013 det vill s\u00e4ga anv\u00e4ndaren och inl\u00e4ggstypen WordPress \u2013 m\u00e5ste vi prata om hur man implementerar en enhet eller en anpassad inl\u00e4ggstyp programmatiskt.<\/p>\n<p>Det finns en hel del dokumentation om detta, och det finns m\u00e5nga handledningar om detta, s\u00e5 jag t\u00e4nker inte f\u00f6rtydliga po\u00e4ngen. Ist\u00e4llet ska jag f\u00f6rs\u00f6ka h\u00e5lla det h\u00e4r s\u00e5 barbent som m\u00f6jligt. Kom ih\u00e5g att m\u00e5let med hela den h\u00e4r serien \u00e4r att i slut\u00e4ndan komma till en punkt d\u00e4r vi associerar enheter via metadata.<\/p>\n<p>Men innan vi g\u00f6r det m\u00e5ste vi skapa enheterna. Vi har allts\u00e5 en anv\u00e4ndare s\u00e5 l\u00e5t oss g\u00f6ra det.<\/p>\n<p>F\u00f6r v\u00e5rt exempel, l\u00e5t oss s\u00e4ga att anv\u00e4ndaren vi skapade i f\u00f6rra inl\u00e4gget, Meghan, \u00e4r f\u00f6rfattaren till en bok. Och inom en WordPress-installation som hanteras av n\u00e5gon annan, finns det en anpassad inl\u00e4ggstyp f\u00f6r b\u00f6cker som var och en har n\u00e5gra attribut:<\/p>\n<ul>\n<li>titel,<\/li>\n<li>beskrivning,<\/li>\n<li>publiceringsdatum,<\/li>\n<li>ISBN,<\/li>\n<li>antal f\u00f6rsta s\u00e5lda exemplar,<\/li>\n<li>d\u00e4r det kan k\u00f6pas,<\/li>\n<li>och s\u00e5 vidare.<\/li>\n<\/ul>\n<p>Du kan l\u00e4gga till mer eller mindre till din implementering. Faktum \u00e4r att du kanske sysslar med att s\u00e4lja e-b\u00f6cker och bokens URL f\u00f6r k\u00f6p \u00e4r ett av attributen. Hur det \u00e4n \u00e4r s\u00e5 f\u00f6rst\u00e5r du id\u00e9n.<\/p>\n<p>Med det sagt kan vi implementera en enkel anpassad inl\u00e4ggstyp f\u00f6r &quot;b\u00f6cker&quot; programmatiskt.<\/p>\n<h3>Implementera en posttyp<\/h3>\n<p>Och det ser <a href=\"https:\/\/gist.github.com\/tommcfarlin\/17ab6e5d052da8d471b15cfd70ffa37c\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\nadd_action( 'init', 'acme_create_book_post_type' );\n\/**\n * Creates a new custom post type called 'Book' using the smallest number of arguments\n * to prepare the post type.\n *\/\nfunction acme_create_book_post_type() {\n\n    $args = array(\n        'labels' =&gt; array(\n            'name'          =&gt; 'Books',\n            'singular_name' =&gt; 'Book',\n        ),\n        'public' =&gt; true,\n    );\n    register_post_type( 'acme_book', $args );\n}<\/code><\/pre>\n<p>Om du l\u00e4ser dokumentationen om <a href=\"https:\/\/codex.wordpress.org\/Post_Types\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">att skapa anpassade inl\u00e4ggstyper<\/a> finns det inget onormalt med detta. Det ska se ut precis som du f\u00f6rv\u00e4ntar dig.<\/p>\n<p>Betr\u00e4ffande var du skapar detta beror p\u00e5 typen av ditt projekt. Det finns m\u00e5nga m\u00e4nniskor som kommer att argumentera f\u00f6r att det \u00e4r i ett plugin eller \u00e4r inbakat i ett tema. Det h\u00e4r \u00e4r inte platsen att diskutera det. Det r\u00e4cker med att s\u00e4ga att jag f\u00f6r mina syften antar att det \u00e4r en del av samma plugin fr\u00e5n den tidigare handledningen.<\/p>\n<p>Dessutom avviker jag inte fr\u00e5n anpassade taxonomier, kommentarer eller n\u00e5gon annan anpassad typ av data som \u00e4r m\u00f6jliga att associera med en anpassad inl\u00e4ggstyp.<\/p>\n<p>D\u00e4rifr\u00e5n tar vi sedan en titt p\u00e5 hur detta ser ut i WordPress administrationsomr\u00e5det samt hur det ser ut i databasen.<\/p>\n<h3>Titta bakom rid\u00e5n<\/h3>\n<p>F\u00f6rst, s\u00e5 h\u00e4r ser det ut (eller b\u00f6r se ut) i WordPress-administrationsomr\u00e5det:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a62adc9ed.png\" 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-167618-61e7a62adc9ed.png\" alt=\"WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter\" ><\/a><\/p>\n<p>Och om du tittar p\u00e5 databasen efter att ha skapat en post, ser du n\u00e5got i stil med detta:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167618-61e7a6307603a.png\" 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-167618-61e7a6307603a.png\" alt=\"WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter\" ><\/a><\/p>\n<p>Sj\u00e4lvklart har jag begr\u00e4nsat posterna som returneras i databasens frontend genom att filtrera resultaten f\u00f6r att g\u00f6ra sk\u00e4rmdumpen l\u00e4ttare att f\u00f6lja.<\/p>\n<h2>P\u00e5 B\u00f6ckerna<\/h2>\n<p>Och det \u00e4r det, verkligen. Jag menar, p\u00e5 den mest grundl\u00e4ggande niv\u00e5n \u00e4r det h\u00e4r hur du skapar en anpassad inl\u00e4ggstyp i WordPress. Jag vet att det inte \u00e4r n\u00e5got nytt, men om jag kunde g\u00f6ra ett lite starkare argument f\u00f6r ett s\u00e5dant h\u00e4r inl\u00e4gg skulle det inneh\u00e5lla f\u00f6ljande tv\u00e5 punkter.<\/p>\n<h4>1 Det handlar om abstraktioner<\/h4>\n<p>Om du vill b\u00f6rja bygga webbapplikationer med WordPress \u00e4r det viktigt att sluta t\u00e4nka p\u00e5 saker i traditionella termer som inl\u00e4gg, sidor, kommentarer och kategorier, och b\u00f6rja t\u00e4nka p\u00e5 dem som mer generiska abstraktioner.<\/p>\n<p>Entiteter, som n\u00e4mnts tidigare i artikeln. N\u00e4r du v\u00e4l g\u00f6r det kommer du att ha en f\u00f6r\u00e4ndring i den mentala modellen som driver din f\u00f6rm\u00e5ga att t\u00e4nka igenom och implementera en l\u00f6sning.<\/p>\n<h4>2 Det handlar om relationer<\/h4>\n<p>\u00c4ven om vi ofta t\u00e4nker p\u00e5 saker i deras individuella delar som inl\u00e4gg och sidor, vet vi att inl\u00e4gg kan ha kommentarer, kommentarer kan ha svar, sidor kan ha mallar och s\u00e5 vidare.<\/p>\n<p>Det finns relationer mellan alla dessa individuella saker som \u00e4r en del av systemet. Och n\u00e4r du b\u00f6rjar t\u00e4nka p\u00e5 att relationerna \u00e4r n\u00e5got som g\u00f6r att vi kan g\u00f6ra mer, b\u00f6rjar du se hur kraftfullt n\u00e5got kan vara. Det \u00e4r helt &quot;helheten \u00e4r st\u00f6rre \u00e4n summan av dess delar.&quot;<\/p>\n<p>S\u00e5 n\u00e4r du v\u00e4l har enskilda enheter p\u00e5 plats och n\u00e4r du b\u00f6rjar se hur de kan relatera till varandra, tar du ett steg upp i att skapa n\u00e5got som l\u00f6ser ett lite mer komplext problem fr\u00e5n till synes enkla delar.<\/p>\n<p>Och det \u00e4r dit vi ska g\u00e5 h\u00e4rn\u00e4st.<\/p>\n<h2>Hur \u00e4r det med metadata?<\/h2>\n<p>Hela syftet med den h\u00e4r serien \u00e4r att g\u00e5 igenom hur man skapar en association mellan enheter, eller hur? Specifikt vill vi skapa en koppling mellan en anv\u00e4ndare och ett inl\u00e4gg eller, mer specifikt, en f\u00f6rfattare och en bok.<\/p>\n<p>WordPress ger grunden f\u00f6r att g\u00f6ra detta och det \u00e4r h\u00e4r kraften hos ytterligare bord och krokar kan komma in i bilden. I n\u00e4sta inl\u00e4gg ska jag prata om hur man skapar den h\u00e4r associationen, riktningarna f\u00f6reningarna kan g\u00e5 och hur man arbetar med denna data om, s\u00e4g, en anv\u00e4ndare raderas fr\u00e5n applikationen.<\/p>\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:\/\/tommcfarlin.com\/wordpress-post-types\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress-inl\u00e4ggstyper: en abstraktion f\u00f6r enheter<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/sv\/wordpress-metadata-association-relaterande-enheter\/\" title=\"WordPress Metadata Association: Relaterande enheter\">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>N\u00e4r programmerare pratar om entiteter talar de vanligtvis om en enskild del i ett system \u2013 som WordPress-posttyper.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,922,724,868],"tags":[1173],"class_list":["post-228496","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-oevrig","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228496","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=228496"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228496\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}