{"id":229234,"date":"2022-11-13T13:19:00","date_gmt":"2022-11-13T10:19:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229234"},"modified":"2022-11-13T13:23:53","modified_gmt":"2022-11-13T10:23:53","slug":"jak-korzystac-z-wtyczek-wordpress-z-automatycznym-ladowaniem-psr-4","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-korzystac-z-wtyczek-wordpress-z-automatycznym-ladowaniem-psr-4\/","title":{"rendered":"Jak korzysta\u0107 z wtyczek WordPress z automatycznym \u0142adowaniem PSR-4"},"content":{"rendered":"\n<p>Powiedzmy, \u017ce pracujesz nad projektem dla kogo\u015b i okre\u015bli\u0142e\u015b jego zakres, zadania s\u0105 delegowane, masz wszystkie biblioteki i narz\u0119dzia potrzebne do rozpocz\u0119cia, a tak\u017ce rozdzieli\u0142e\u015b temat lub prezentacj\u0119, i jaka b\u0119dzie funkcjonalno\u015b\u0107 lub wtyczki.<\/p>\n<p>Ale zamiast mie\u0107 gar\u015b\u0107 pojedynczych wtyczek, co by by\u0142o, gdyby istnia\u0142 pakiet mniejszych funkcjonalnych wtyczek lub mikrowtyczek lub jakkolwiek chcesz je nazwa\u0107, dzia\u0142aj\u0105cy w celu zasilania pakietu?<\/p>\n<p>Co wi\u0119cej, wszystkie z nich s\u0105 zbudowane na tym samym fundamencie, ale wsp\u00f3\u0142dziel\u0105 ze sob\u0105 kod i \u017ceby by\u0142o ciekawiej, zdecydujesz si\u0119 u\u017cy\u0107 automatycznego \u0142adowania PSR-4 przez <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a>, aby zaj\u0105\u0107 si\u0119 tym wszystkim?<\/p>\n<h2>PSR-4 Autoloading Wtyczki WordPress<\/h2>\n<p>Po pierwsze, spos\u00f3b my\u015blenia o tym, co pr\u00f3buj\u0119 powiedzie\u0107 (bo kto wie, czy mam jasno\u015b\u0107 \ud83d\ude43) jest taki, \u017ce masz swoj\u0105 prac\u0119 w <code>wp-content\/plugins<\/code>katalogu. A twoja wtyczka znajduje si\u0119, powiedzmy, <code>acme-plugins<\/code>i ma podkatalogi dla twoich mikrowtyczek.<\/p>\n<p>W tym przyk\u0142adzie utrzymamy to w prosty spos\u00f3b i powiemy, \u017ce jest g\u0142\u00f3wna wtyczka, a potem tylko jedna mikrowtyczka. Katalog wygl\u0105da\u0142by mniej wi\u0119cej tak;<\/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=\"Jak korzysta\u0107 z wtyczek WordPress z automatycznym \u0142adowaniem PSR-4\"><\/a><\/p>\n<p>Teraz s\u0105 pliki, kt\u00f3re spodziewasz si\u0119 zobaczy\u0107 we wtyczce:<\/p>\n<ul>\n<li>CZYTAJ,<\/li>\n<li>LICENCJA,<\/li>\n<li>REJESTR ZMIAN,<\/li>\n<li>kompozytor.json<\/li>\n<li>kompozytor.lock<\/li>\n<li>sprzedawca<\/li>\n<li>plik startowy wtyczki,<\/li>\n<li>itp.<\/li>\n<\/ul>\n<p>A teraz chodzi o to: je\u015bli u\u017cywasz <a href=\"http:\/\/www.php-fig.org\/psr\/psr-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-2<\/a> i zamierzasz u\u017cywa\u0107 automatu \u0142aduj\u0105cego <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a>, musisz wiedzie\u0107 o dw\u00f3ch rzeczach:<\/p>\n<ol>\n<li>Przestrzenie nazw powinny by\u0107 zgodne z organizacj\u0105 katalogu. M\u00f3wi\u0142em o tym troch\u0119 podczas <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"mojej prezentacji WordCamp Atlanta 2017\">mojej prezentacji WordCamp Atlanta 2017<\/a> (konkretnie w ramach wirtualnej i logicznej organizacji).<\/li>\n<li>Jak pracowa\u0107, <code>composer.json<\/code>aby zdefiniowa\u0107 swoje autoloadery. Mo\u017cesz du\u017co o tym przeczyta\u0107 <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tutaj<\/a>, ale w dalszej cz\u0119\u015bci tego postu podam uwagi dotycz\u0105ce klifu.<\/li>\n<\/ol>\n<p>Problem polega na tym, \u017ce <code>vendor<\/code>katalog znajduje si\u0119 na wy\u017cszym poziomie, na kt\u00f3rym istniej\u0105 niekt\u00f3re pliki \u017ar\u00f3d\u0142owe. W ten spos\u00f3b standardowy spos\u00f3b ustawienia niestandardowego automatycznego \u0142adowania w Composerze nie zadzia\u0142a.<\/p>\n<p>Na przyk\u0142ad bardzo typowe <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-00-composer-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jest to<\/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>Ale aby zrekompensowa\u0107 nasz\u0105 prac\u0119, musimy <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-01-composer-updated-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">to zrobi\u0107<\/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>To prosta zmiana, ale to prosty przyk\u0142ad, prawda? Wi\u0119c jaki jest z tego wniosek?<\/p>\n<p>Pami\u0119taj, \u017ce zaktualizowali\u015bmy niekt\u00f3re zmiany w\u00a0 lokalizacji <strong>automatycznego \u0142adowania<\/strong>. W szczeg\u00f3lno\u015bci to si\u0119 dzieje:<\/p>\n<ul>\n<li>Pierwszym elementem jest przestrze\u0144 nazw najwy\u017cszego poziomu, do kt\u00f3rej b\u0119d\u0105 nale\u017ce\u0107 wszystkie wtyczki nale\u017c\u0105ce do <strong>wtyczki Acme<\/strong>.<\/li>\n<li>Drugi wpis odnosi si\u0119 do <strong>MicroPlugin<\/strong>, kt\u00f3ry widzisz w katalogu powy\u017cej. Reprezentuje przestrze\u0144 nazw dla tej konkretnej wtyczki i m\u00f3wi Composerowi, aby szuka\u0142 plik\u00f3w \u017ar\u00f3d\u0142owych do automatycznego za\u0142adowania przy u\u017cyciu katalogu w\u0142a\u015bciwo\u015bci<\/li>\n<\/ul>\n<p>St\u0105d dodasz nowy wpis dla autoloadera, kt\u00f3ry odpowiada ka\u017cdej mikrowtyczce, kt\u00f3ra b\u0119dzie nale\u017ce\u0107 do wtyczki najwy\u017cszego poziomu.<\/p>\n<h2>Organizowanie przysz\u0142ych mikrowtyczek<\/h2>\n<p>Istnieje kilka sposob\u00f3w na uporz\u0105dkowanie kodu tak, aby mo\u017cna by\u0142o u\u017cy\u0107 domy\u015blnego automatycznego \u0142adowania.<\/p>\n<p>Je\u015bli zastosujesz model mikrowtyczek (z braku lepszego terminu), to nie zadzia\u0142a, wi\u0119c pozostaniesz z konieczno\u015bci\u0105 reorganizacji plik\u00f3w, a to z czasem mo\u017ce by\u0107 uci\u0105\u017cliwe.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <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 Automatyczne \u0142adowanie wtyczek WordPress nie jest trudne, ale co, je\u015bli chcesz u\u017cy\u0107 jednej wtyczki, kt\u00f3ra sk\u0142ada si\u0119 z r\u00f3\u017cnych wtyczek i r\u00f3wnie\u017c je automatycznie \u0142adowa\u0107?<\/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":[897,845,866,815],"tags":[1169],"class_list":["post-229234","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kod","category-samouczki","category-wordpress-7","category-wtyczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229234"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229234\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}