{"id":231345,"date":"2023-01-04T12:23:00","date_gmt":"2023-01-04T09:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231345"},"modified":"2022-12-25T21:42:54","modified_gmt":"2022-12-25T18:42:54","slug":"o-funkcjach-i-obowiazkowych-wtyczkach","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/o-funkcjach-i-obowiazkowych-wtyczkach\/","title":{"rendered":"O funkcjach i obowi\u0105zkowych wtyczkach"},"content":{"rendered":"\n<p>Pracowa\u0142em nad ma\u0142ym projektem, bardziej aplikacji internetowej ni\u017c witryny, kt\u00f3ry wymaga\u0142 opracowania zar\u00f3wno niestandardowego motywu, jak i \u015bci\u015ble powi\u0105zanej, ale bardzo specyficznej funkcjonalno\u015bci.<\/p>\n<p>Jest to bardzo w\u0105sko skoncentrowany projekt (o kt\u00f3rym prawdopodobnie opowiem w przysz\u0142o\u015bci), ale pracuj\u0105c nad nim, zmusi\u0142o mnie to do powrotu do aspektu tworzenia motyw\u00f3w w programowaniu WordPress.<\/p>\n<p>Nie, nie robi\u0119 \u017cadnego projektu \u2013 na szcz\u0119\u015bcie \u2013 ale musz\u0119 pracowa\u0107 nad dostosowaniami motyw\u00f3w z funkcjonalnej perspektywy. Robi\u0105c to, musia\u0142em jednak ponownie przejrze\u0107 wymagane <code>functions.php<\/code>i pewne rozwa\u017cania, kt\u00f3rych nigdy wcze\u015bniej nie mia\u0142em.<\/p>\n<p>Co wi\u0119cej, spowodowa\u0142o to, \u017ce przyjrza\u0142em si\u0119 g\u0142\u0119biej u\u017cyciu <code>mu-plugins<\/code>i zapyta\u0142em, kiedy s\u0105 one konieczne i dlaczego nie u\u017cywa\u0142em ich wi\u0119cej w przesz\u0142o\u015bci (lub nawet kiedy naprawd\u0119 trzeba by ich u\u017cywa\u0107).<\/p>\n<p>Wi\u0119c zamierzam troch\u0119 poetycko o tym m\u00f3wi\u0107.<\/p>\n<pre><code>TL;DR<\/code><\/pre>\n<p>Kiedy robi\u0142em tworzenie motyw\u00f3w, <code>functions.php<\/code>by\u0142 u\u017cywany do dw\u00f3ch rzeczy (co samo w sobie jest problematyczne), ale nadal:<\/p>\n<ol>\n<li>w\u0142\u0105czy\u0107 lub wy\u0142\u0105czy\u0107 funkcje w motywach,<\/li>\n<li>aby zdefiniowa\u0107 funkcjonalno\u015b\u0107 specyficzn\u0105 dla motywu.<\/li>\n<\/ol>\n<p>W <a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/theme-functions\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">podr\u0119czniku dla programist\u00f3w motyw\u00f3w<\/a> czytamy:<\/p>\n<blockquote>\n<p>Plik <code>functions.php<\/code>to miejsce, w kt\u00f3rym dodajesz unikalne funkcje do swojego motywu WordPress. Mo\u017ce by\u0107 u\u017cywany do \u0142\u0105czenia si\u0119 z podstawowymi funkcjami WordPressa, aby Tw\u00f3j motyw by\u0142 bardziej modu\u0142owy, rozszerzalny i funkcjonalny.<\/p>\n<p>Funkcje motywu, Podr\u0119cznik dla programist\u00f3w motyw\u00f3w<\/p>\n<\/blockquote>\n<p>Rozumiem to, ale z mojej perspektywy i wraz z ewolucj\u0105 WordPressa, my\u015bl\u0119, \u017ce <code>functions.php<\/code>powinno to by\u0107 po\u015bwi\u0119cone funkcjonalno\u015bci specyficznej dla motywu, je\u015bli chodzi o rzeczy, kt\u00f3re \u0142\u0105cz\u0105 si\u0119 bezpo\u015brednio z rdzeniem, takie jak:<\/p>\n<ul>\n<li>funkcjonalno\u015b\u0107 konfiguratora,<\/li>\n<li>funkcjonalno\u015b\u0107 menu,<\/li>\n<li>rejestracja skryptu i stylu,<\/li>\n<li>i tak dalej.<\/li>\n<\/ul>\n<p>Ale je\u015bli jest co\u015b, co musi dzia\u0142a\u0107 podczas jednego z zaczep\u00f3w i jest bardziej zgodne z logik\u0105 specyficzn\u0105 dla domeny, to <strong>nie<\/strong> nale\u017cy do tego pliku.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158759-61e6e52f7b3b5.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-158759-61e6e52f7b3b5.png\" alt=\"O funkcjach i obowi\u0105zkowych wtyczkach\" ><\/a><\/p>\n<p>Rodzi to jednak pytanie: gdzie znajduj\u0105 si\u0119 funkcje specyficzne dla domeny?<\/p>\n<h3>Wprowad\u017a wtyczki, kt\u00f3rych nale\u017cy u\u017cywa\u0107<\/h3>\n<p>Wiem, \u017ce rzeczy takie jak <code>inc<\/code>katalogi staj\u0105 si\u0119 coraz bardziej powszechne, ale nie przejmuj\u0119 si\u0119 nimi, gdy m\u00f3wi\u0119 o tworzeniu motyw\u00f3w, zw\u0142aszcza gdy nie skupiam si\u0119 na opracowywaniu motyw\u00f3w i ta konkretna struktura katalog\u00f3w nie jest w moim stylu.<\/p>\n<p>Zreszt\u0105, je\u015bli chodzi o rozwi\u0105zania wysokospecjalistyczne (gdzie rozwi\u0105zanie jest po\u0142\u0105czeniem prezentacji i \u015bci\u015ble skoncentrowanej funkcjonalno\u015bci), zaczynam my\u015ble\u0107 o <code>mu-plugins<\/code>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158759-61e6e536dbfe7.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-158759-61e6e536dbfe7.png\" alt=\"O funkcjach i obowi\u0105zkowych wtyczkach\" ><\/a><\/p>\n<p>A powodem, dla kt\u00f3rego nie my\u015bl\u0119 o standardowej wtyczce WordPress, jest to, \u017ce s\u0105 one og\u00f3lnie zaprojektowane do pracy z dowolnym motywem i dodawania funkcjonalno\u015bci. Nie tak z <code>mu-plugins<\/code>.<\/p>\n<blockquote>\n<p>Wtyczki, kt\u00f3rych nale\u017cy u\u017cywa\u0107 (aka mu-plugins) to wtyczki instalowane w specjalnym katalogu w folderze zawarto\u015bci i kt\u00f3re s\u0105 automatycznie w\u0142\u0105czane we wszystkich witrynach instalacji.<\/p>\n<p><a href=\"https:\/\/wordpress.org\/support\/article\/must-use-plugins\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Niezb\u0119dne wtyczki<\/a>, WordPress.org<\/p>\n<\/blockquote>\n<p>Oto m\u00f3j proces my\u015blowy:<\/p>\n<ol>\n<li>Tematy s\u0105 do prezentacji<\/li>\n<li>Wtyczki s\u0142u\u017c\u0105 funkcjonalno\u015bci.<\/li>\n<li>Wtyczki s\u0105 zaprojektowane do u\u017cytku niezale\u017cnie od motywu i w ca\u0142ej witrynie.<\/li>\n<li>Niezb\u0119dne wtyczki to wtyczki, kt\u00f3re s\u0105 domy\u015blnie w\u0142\u0105czone i u\u017cywane<\/li>\n<li>Dlatego logika specyficzna dla domeny dla specjalistycznego rozwi\u0105zania powinna znajdowa\u0107 si\u0119 w niezb\u0119dnej wtyczce.<\/li>\n<\/ol>\n<p>Jasne, mo\u017cna za\u0142o\u017cy\u0107, \u017ce niekt\u00f3re motywy mog\u0105 wymaga\u0107 funkcjonalno\u015bci, kt\u00f3rej trzeba u\u017cy\u0107, ale czy to nadal nie pasuje do idei, \u017ce funkcjonalno\u015b\u0107 powinna znajdowa\u0107 si\u0119 we wtyczce, kt\u00f3rej nale\u017cy u\u017cywa\u0107?<\/p>\n<p>Niezale\u017cnie od tego, podej\u015bcie, kt\u00f3re stosuj\u0119, jest nast\u0119puj\u0105ce:<\/p>\n<ol>\n<li>Funkcjonalno\u015b\u0107, kt\u00f3ra konkretnie \u0142\u0105czy funkcje motywu z rdzeniem WordPress, wchodzi w <code>functions.php<\/code>.<\/li>\n<li>Funkcjonalno\u015b\u0107, kt\u00f3ra jest oparta na logice domeny, ale wymaga do dzia\u0142ania ca\u0142ego rozwi\u0105zania, znajduje si\u0119 w <code>mu-plugin<\/code>.<\/li>\n<\/ol>\n<p>W tym momencie <a href=\"https:\/\/tommcfarlin.com\/from-self-employment-to-employment-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mojej kariery<\/a> nie wykonuj\u0119 zbyt wiele pracy, skupiaj\u0105c si\u0119 na czymkolwiek poza backendem, ale w rzadkich okazjach, w kt\u00f3rych musz\u0119 poszerzy\u0107 prac\u0119, kt\u00f3r\u0105 robi\u0119, stwierdzam, \u017ce nadal staram si\u0119 by\u0107 jako analityczny i przemy\u015blany na temat sposobu, w jaki buduj\u0119 projekt.<\/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>Funkcje i wtyczki, kt\u00f3rych nale\u017cy u\u017cywa\u0107, to obie rzeczy, kt\u00f3re zas\u0142uguj\u0105 na rozwa\u017cenie, zw\u0142aszcza przy tworzeniu wysoce wyspecjalizowanych rozwi\u0105za\u0144.<\/p>\n","protected":false},"author":1,"featured_media":158760,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,805,845,866],"tags":[1169],"class_list":["post-231345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-php-7","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231345","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=231345"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231345\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/158760"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=231345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=231345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=231345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}