{"id":229140,"date":"2022-11-13T13:13:00","date_gmt":"2022-11-13T10:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229140"},"modified":"2022-11-13T13:23:57","modified_gmt":"2022-11-13T10:23:57","slug":"hur-man-anvaender-psr-4-autoloading-wordpress-plugins","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-anvaender-psr-4-autoloading-wordpress-plugins\/","title":{"rendered":"Hur man anv\u00e4nder PSR-4 Autoloading WordPress Plugins"},"content":{"rendered":"\n<p>S\u00e4g att du jobbar p\u00e5 ett projekt f\u00f6r n\u00e5gon och du har avgr\u00e4nsat det, uppgifter \u00e4r delegerade, du har alla bibliotek och verktyg du beh\u00f6ver f\u00f6r att komma ig\u00e5ng, och du har separerat vad som kommer att vara temat eller presentationen, och vad kommer att vara funktionalitet eller plugins.<\/p>\n<p>Men i st\u00e4llet f\u00f6r att ha en handfull individuella plugins, t\u00e4nk om det fanns ett paket med mindre funktionella plugins eller mikro-plugins eller vad du nu vill kalla dem som fungerar f\u00f6r att driva paketet?<\/p>\n<p>Dessutom, alla dessa \u00e4r byggda p\u00e5 samma grund men som ocks\u00e5 delar kod med varandra och f\u00f6r att g\u00f6ra saker mer intressanta v\u00e4ljer du att anv\u00e4nda en PSR-4 autoloader via <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> f\u00f6r att ta hand om allt detta?<\/p>\n<h2>PSR-4 Autoloading WordPress Plugins<\/h2>\n<p>F\u00f6r det f\u00f6rsta, s\u00e4ttet att t\u00e4nka p\u00e5 vad jag f\u00f6rs\u00f6ker s\u00e4ga (f\u00f6r vem vet om jag \u00e4r tydlig \ud83d\ude43) \u00e4r att du har ditt arbete i <code>wp-content\/plugins<\/code>katalogen. Och din plugin finns i, s\u00e4g, <code>acme-plugins<\/code>och har underkataloger f\u00f6r dina mikro-plugins.<\/p>\n<p>Vi kommer att h\u00e5lla detta enkelt f\u00f6r det h\u00e4r exemplet och s\u00e4ga att det finns huvudplugin och sedan bara en mikroplugin. Katalogen skulle se ut ungef\u00e4r s\u00e5 h\u00e4r;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165780-61e788fa5037d.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-165780-61e788fa5037d.png\" alt=\"Hur man anv\u00e4nder PSR-4 Autoloading WordPress Plugins\"><\/a><\/p>\n<p>Nu finns det filerna du f\u00f6rv\u00e4ntar dig att se i ett plugin:<\/p>\n<ul>\n<li>L\u00c4S MIG,<\/li>\n<li>LICENS,<\/li>\n<li>CHANGELOG,<\/li>\n<li>composer.json<\/li>\n<li>komposit\u00f6r.l\u00e5s<\/li>\n<li>S\u00e4ljare<\/li>\n<li>plugin-bootstrap-filen,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Nu \u00e4r det h\u00e4r: Om du anv\u00e4nder <a href=\"http:\/\/www.php-fig.org\/psr\/psr-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-2<\/a> och du ska anv\u00e4nda en <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a> autoloader, s\u00e5 finns det tv\u00e5 saker du beh\u00f6ver veta:<\/p>\n<ol>\n<li>Namnomr\u00e5dena b\u00f6r matcha katalogorganisationen. Jag pratade lite om detta under <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/namnutrymmen-och-autoladdning-i-wordpress\/\" title=\"min WordCamp Atlanta 2017-presentation\">min WordCamp Atlanta 2017-presentation<\/a> (s\u00e4rskilt under virtuell och logisk organisation).<\/li>\n<li>Hur man arbetar med <code>composer.json<\/code>f\u00f6r att definiera dina autoloaders. Du kan l\u00e4sa mycket om detta <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r<\/a>, men jag ska ge klippanteckningarna i resten av det h\u00e4r inl\u00e4gget.<\/li>\n<\/ol>\n<p>S\u00e5 problemet \u00e4r att <code>vendor<\/code>katalogen ligger p\u00e5 en niv\u00e5 \u00f6ver d\u00e4r n\u00e5gra av k\u00e4llfilerna finns. S\u00e5ledes kommer standards\u00e4ttet att st\u00e4lla in en anpassad autoloader i Composer inte att fungera.<\/p>\n<p>Det \u00e4r till exempel v\u00e4ldigt typiskt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-00-composer-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">att se detta<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"src\/\",\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>Men f\u00f6r att kompensera f\u00f6r v\u00e5rt arbete m\u00e5ste vi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-01-composer-updated-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">g\u00f6ra detta<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"\",\n      \"AcmeMicroPlugin\": \"MicroPlugin\/src\/\"\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>Det \u00e4r en enkel f\u00f6r\u00e4ndring, men det \u00e4r ett enkelt exempel, eller hur? S\u00e5 vad \u00e4r f\u00f6rdelen med detta?<\/p>\n<p>Observera att vi har uppdaterat n\u00e5gra \u00e4ndringar i den <strong>automatiska laddningsplatsen<\/strong>. Specifikt, det h\u00e4r \u00e4r vad som h\u00e4nder:<\/p>\n<ul>\n<li>Det f\u00f6rsta objektet \u00e4r namnutrymmet p\u00e5 toppniv\u00e5 som alla plugins som kommer att tillh\u00f6ra <strong>Acme Plugin<\/strong> kommer att tillh\u00f6ra.<\/li>\n<li>Den andra posten h\u00e4nvisar till <strong>MicroPlugin<\/strong> som du ser i katalogen ovan. Detta representerar namnutrymmet f\u00f6r just detta plugin, och det s\u00e4ger till Composer att leta efter k\u00e4llfiler som ska laddas automatiskt med hj\u00e4lp av egenskapskatalogen<\/li>\n<\/ul>\n<p>H\u00e4rifr\u00e5n kommer du att l\u00e4gga till en ny post f\u00f6r autoloadern som motsvarar varje mikroplugin som kommer att tillh\u00f6ra toppniv\u00e5pluginen.<\/p>\n<h2>Organisera framtida mikroplugins<\/h2>\n<p>Det finns n\u00e5gra s\u00e4tt som du kan hantera att organisera din kod s\u00e5 att du kan anv\u00e4nda en standard autoloader.<\/p>\n<p>Om du f\u00f6ljer mikropluginmodellen (i brist p\u00e5 en b\u00e4ttre term) kommer den inte att fungera s\u00e5 du m\u00e5ste omorganisera dina filer, och det kan vara jobbigt med tiden.<\/p>\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>PSR-4 Autoladda WordPress-plugin-program \u00e4r inte sv\u00e5rt, men vad h\u00e4nder om du vill anv\u00e4nda ett plugin som \u00e4r sammansatt av en m\u00e4ngd olika plugins och autoladda dem ocks\u00e5?<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,818,868],"tags":[1173],"class_list":["post-229140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-plugins-3","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229140","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=229140"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229140\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}