{"id":230472,"date":"2022-12-13T11:03:00","date_gmt":"2022-12-13T08:03:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230472"},"modified":"2022-12-13T11:03:57","modified_gmt":"2022-12-13T08:03:57","slug":"organizowanie-ekranow-ustawien-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/organizowanie-ekranow-ustawien-wordpress\/","title":{"rendered":"Organizowanie ekran\u00f3w ustawie\u0144 WordPress"},"content":{"rendered":"\n<p>Poniewa\u017c wielu z nas kontynuuje <strong><a href=\"https:\/\/php.net\/manual\/en\/migration70.new-features.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">rozw\u00f3j PHP7+<\/a><\/strong>, mo\u017cemy nadal korzysta\u0107 z wielu nowych funkcji oferowanych przez j\u0119zyk.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161718-61e728aab90bf.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-161718-61e728aab90bf.png\" alt=\"Organizowanie ekran\u00f3w ustawie\u0144 WordPress\"><\/a><\/p>\n<p>W mi\u0119dzyczasie jednak nadal istniej\u0105 funkcje PHP i powi\u0105zanego oprogramowania, kt\u00f3rych mo\u017cemy u\u017cy\u0107, aby usprawni\u0107 nasz rozw\u00f3j. Najmniejszym z nich (i tym, o czym troch\u0119 <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/przestrzenie-nazw-i-automatyczne-ladowanie-w-wordpress\/\" title=\"pisa\u0142em i o kt\u00f3rym m\u00f3wi\u0142em) s\u0105 przestrzenie nazw.\">pisa\u0142em i o kt\u00f3rym m\u00f3wi\u0142em) s\u0105 przestrzenie nazw.<\/a><\/strong><\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161718-61e728af99d84.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-161718-61e728af99d84.png\" alt=\"Organizowanie ekran\u00f3w ustawie\u0144 WordPress\"><\/a><\/p>\n<p>Oto jednak rzecz: lubi\u0119 mie\u0107 struktur\u0119 plik\u00f3w i katalog\u00f3w mojej wtyczki, aby by\u0142y zorganizowane tak, aby odzwierciedla\u0142y konwencje przestrzeni nazw, kt\u00f3rych przestrzegaj\u0105. Mo\u017cna to zrobi\u0107 w przypadku taksonomii, metabox\u00f3w, obiekt\u00f3w domen, funkcji zwi\u0105zanych z baz\u0105 danych i tak dalej.<\/p>\n<p>W tym po\u015bcie chc\u0119 jednak opowiedzie\u0107 o sposobie organizowania ekran\u00f3w ustawie\u0144 WordPressa zar\u00f3wno ze struktur logicznych \u2013 czyli lokalizacji systemu plik\u00f3w \u2013 jak i wirtualnych \u2013 czyli przestrzeni nazw \u2013 struktur organizacyjnych.<\/p>\n<h2>Organizowanie ekran\u00f3w ustawie\u0144 WordPress<\/h2>\n<p>Pierwsz\u0105 kwesti\u0105, kt\u00f3r\u0105 chc\u0119 poruszy\u0107, jest to: chocia\u017c m\u00f3wi\u0119 o organizowaniu ekran\u00f3w ustawie\u0144 WordPressa, nie m\u00f3wi\u0119 nic o API. Zamiast tego za\u0142\u00f3\u017cmy, \u017ce w tym po\u015bcie m\u00f3wi\u0119 o nast\u0119puj\u0105cych kwestiach:<\/p>\n<ul>\n<li>niestandardowe menu z powi\u0105zan\u0105 <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">stron\u0105 menu,<\/a><\/strong><\/li>\n<li>strona menu, kt\u00f3ra renderuje wymagania dla strony ustawie\u0144 (takie jak <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_nonce_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pole nonce<\/a><\/strong> itd.)<\/li>\n<li>podszablon zawieraj\u0105cy rzeczywiste ustawienia (lub wiele podszablon\u00f3w, je\u015bli chcesz uwzgl\u0119dni\u0107 wiele ustawie\u0144).<\/li>\n<\/ul>\n<p>Nie b\u0119d\u0119 m\u00f3wi\u0142 o procesie sanityzacji, serializacji, wyszukiwaniu, walidacji i wy\u015bwietlaniu. To jest czysto organizacyjne.<\/p>\n<h3>My\u015blenie przez proces<\/h3>\n<p>Bior\u0105c pod uwag\u0119, \u017ce zamierzamy organizowa\u0107 nasze pliki za pomoc\u0105 katalog\u00f3w, kt\u00f3re r\u00f3wnie\u017c mapuj\u0105 1:1 z przestrzeniami nazw, zastan\u00f3wmy si\u0119 dok\u0142adnie, czego b\u0119dziemy potrzebowa\u0107. Podchodz\u0119 do tego tak:<\/p>\n<ol>\n<li>Tworzymy co\u015b specjalnie dla kontekstowej aplikacji WordPress. Wskazuje to przestrze\u0144 nazw.<\/li>\n<li>Zamierzamy stworzy\u0107 menu administracyjne, co oznacza, \u017ce \u200b\u200boboje pracujemy w obszarze administracyjnym WordPressa, a wi\u0119c w innej przestrzeni nazw, oraz z menu, kt\u00f3re s\u0105 inn\u0105 przestrzeni\u0105 nazw.<\/li>\n<li>Nast\u0119pnie potrzebujemy plik\u00f3w do wy\u015bwietlenia standardowego ekranu dla WordPressa, wi\u0119c potrzebujemy przestrzeni nazw Views,<\/li>\n<li>A potem b\u0119dziemy potrzebowa\u0107 kodu specyficznego dla domeny, aby wpa\u015b\u0107 do widoku, wi\u0119c ostatecznie b\u0119dziemy potrzebowa\u0107 katalogu Partials (a tym samym przestrzeni nazw).<\/li>\n<\/ol>\n<p>Tak wi\u0119c ostateczna, logiczna organizacja danych wygl\u0105da\u0142aby mniej wi\u0119cej tak:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161718-61e728b4f0fe4.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-161718-61e728b4f0fe4.png\" alt=\"Organizowanie ekran\u00f3w ustawie\u0144 WordPress\"><\/a><\/p>\n<p>By\u0107 mo\u017ce najwa\u017cniejsz\u0105 rzecz\u0105, na kt\u00f3r\u0105 nale\u017cy zwr\u00f3ci\u0107 uwag\u0119 w tej konkretnej organizacji plik\u00f3w, jest to, \u017ce klasa <strong>AdminMenu<\/strong> jest klas\u0105 bazow\u0105, z kt\u00f3rej mog\u0105 dziedziczy\u0107 wszystkie okre\u015blone (lub bardziej konkretne) klasy.<\/p>\n<p>Oznacza to, \u017ce klasa <strong>AcmeAdminMenu<\/strong> dziedziczy z niej pewne w\u0142a\u015bciwo\u015bci i funkcje, a nast\u0119pnie implementuje jej logik\u0119 lub dodaje r\u00f3wnie\u017c jej logik\u0119.<\/p>\n<h3>Przestrze\u0144 nazw ka\u017cdego pliku<\/h3>\n<p>Kiedy organizujesz swoje pliki w ten spos\u00f3b, przestrzenie nazw staj\u0105 si\u0119 niemal oczywiste, prawda? Oto przestrze\u0144 nazw dla ka\u017cdego z plik\u00f3w:<\/p>\n<ul>\n<li>WordPressAdministratorMenuAdminMenu<\/li>\n<li>WordPressAdminMenuAcmeAdminMenu<\/li>\n<li>WordPressAdminMenuWidokiUstawienia<\/li>\n<li>WordPressAdminMenuWidokiUstawieniaCz\u0119\u015bci<\/li>\n<\/ul>\n<p>Zauwa\u017c, \u017ce poniewa\u017c <strong>acme-settings.php<\/strong> jest technicznie tylko znacznikiem dla opcji renderowania, niekoniecznie musi by\u0107 umieszczony w przestrzeni nazw, poniewa\u017c jest zawarty w <strong>widoku<\/strong>, kt\u00f3ry go renderuje.<\/p>\n<p>Niezale\u017cnie od tego, je\u015bli jeste\u015b fanem utrzymywania rzeczy tak zorganizowanych, jak to tylko mo\u017cliwe, sensowne jest zagnie\u017cd\u017canie cz\u0119\u015bci w katalogu o nazwie w\u0142a\u015bnie tak.<\/p>\n<h2>A co z kodem?<\/h2>\n<p>Je\u015bli chcesz zobaczy\u0107 kod czego\u015b takiego, rozwa\u017cam utworzenie ma\u0142ej wtyczki, kt\u00f3ra pokazuje, jak to wszystko pasuje do siebie. W ko\u0144cu to troch\u0119 na wysokim poziomie, prawda? Mam na my\u015bli, \u017ce nie ma implementacji.<\/p>\n<p>Z drugiej strony, je\u015bli to pomo\u017ce ci wskaza\u0107 w\u0142a\u015bciwy kierunek dla obecnego lub przysz\u0142ego projektu, mo\u017ce to wystarczy\u0107.<\/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>Chc\u0119 opowiedzie\u0107 o sposobie organizowania ekran\u00f3w ustawie\u0144 WordPressa zar\u00f3wno z logiki, jak i wirtualnych struktur organizacyjnych.<\/p>\n","protected":false},"author":1,"featured_media":236109,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,805,836,866],"tags":[1169],"class_list":["post-230472","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-przewodnik-dla-poczatkujacych","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230472","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=230472"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230472\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236109"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}