{"id":228432,"date":"2022-10-23T10:17:00","date_gmt":"2022-10-23T07:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228432"},"modified":"2022-11-09T02:24:35","modified_gmt":"2022-11-08T23:24:35","slug":"kiedy-uzywac-podakcji-wordpress-i-czym-one-sa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/kiedy-uzywac-podakcji-wordpress-i-czym-one-sa\/","title":{"rendered":"Kiedy u\u017cywa\u0107 podakcji WordPress (i czym one s\u0105?)"},"content":{"rendered":"\n<p>Niedawno przeszed\u0142em przez proces u\u017cywania konstruktora klasy, aby <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/zatrzymaj-wykonywanie-wtyczki-bez-zaleznosci\/\" title=\"uniemo\u017cliwi\u0107 dzia\u0142anie wtyczki\" >uniemo\u017cliwi\u0107 dzia\u0142anie wtyczki<\/a>, je\u015bli nie zostanie za\u0142adowana oczekiwana zale\u017cno\u015b\u0107.<\/p>\n<p>Chocia\u017c nie uwa\u017cam tej konkretnej strategii za problem w przypadku jednorazowej zale\u017cno\u015bci lub w pewnych sytuacjach, istniej\u0105 sposoby, kt\u00f3re mog\u0105 prowadzi\u0107 do zapach\u00f3w kodu.<\/p>\n<p>Uniemo\u017cliwia nam r\u00f3wnie\u017c korzystanie z natywnej funkcji Core zwanej podakcjami WordPress:<\/p>\n<p><a href=\"https:\/\/twitter.com\/JJJ\/status\/822265137935646720\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/twitter.com\/JJJ\/status\/822265137935646720<\/a><\/p>\n<p>Ale zanim przyjrz\u0119 si\u0119 podakcji, chc\u0119 si\u0119 upewni\u0107, \u017ce mam jasno\u015b\u0107 co do problem\u00f3w, kt\u00f3re przy u\u017cyciu podej\u015bcia warunkowego (w przeciwie\u0144stwie do podakcji) mog\u0105 rozmna\u017ca\u0107 si\u0119 z zapachami kodu.<\/p>\n<h2>Podakcje WordPress<\/h2>\n<p>Zapachy kodu mo\u017cna wyja\u015bni\u0107 na wiele sposob\u00f3w, ale m\u00f3j ulubiony spos\u00f3b <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pochodzi od Martina Fowlera<\/a> :<\/p>\n<blockquote>\n<p>\u2026zapachy to pewne struktury w kodzie, kt\u00f3re wskazuj\u0105 na naruszenie podstawowych zasad projektowania i negatywnie wp\u0142ywaj\u0105 na jako\u015b\u0107 projektu.<\/p>\n<\/blockquote>\n<p>Jest jeszcze jedna \u015bwietna strona o <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zapachach kodu na Source Making<\/a>, kt\u00f3r\u0105 polecam przeczyta\u0107, je\u015bli masz szans\u0119.<\/p>\n<p>A spos\u00f3b, w jaki warunkowe mog\u0105 prowadzi\u0107 do zapach\u00f3w kodu, jest prosty: mo\u017ce za\u015bmieca\u0107 tw\u00f3j kod ogromnym zestawem instrukcji, kt\u00f3re zawieraj\u0105 wiele kontroli <a href=\"https:\/\/php.net\/manual\/en\/function.class-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">class_exists<\/a>.<\/p>\n<p>I to jest problem.<\/p>\n<p>Za ka\u017cdym razem, gdy wprowadzasz inn\u0105 zale\u017cno\u015b\u0107 do swojego kodu, ko\u0144czysz dodawanie kolejnego warunkowego sprawdzania, czy klasa jest obecna w aplikacji WordPress.<\/p>\n<p>Uwa\u017cam, \u017ce mo\u017cna to zrobi\u0107 z pojedyncz\u0105 zale\u017cno\u015bci\u0105 \u2013 mo\u017ce nawet dwiema zale\u017cno\u015bciami \u2013 i je\u015bli pracujesz \u201ewystarczaj\u0105co wysoko&quot; w swojej architekturze, ale nie jest to spos\u00f3b na prawid\u0142owe radzenie sobie z tym z wieloma zale\u017cno\u015bciami ani na ni\u017cszym poziomie w Twoja wtyczka.<\/p>\n<p>W tym miejscu pojawiaj\u0105 si\u0119 podakcje WordPress. Mo\u017cesz zobaczy\u0107 list\u0119 podakcji w tweecie za po\u015brednictwem Jana powy\u017cej.<\/p>\n<p><a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">W Kodeksie bbPress<\/a> znajduje si\u0119 r\u00f3wnie\u017c oficjalna definicja podakcji :<\/p>\n<blockquote>\n<p>Te wewn\u0119trzne dzia\u0142ania mo\u017cna traktowa\u0107 jako \u201epod-dzia\u0142ania&#8221; i pozwalaj\u0105 dodawa\u0107 lub zmienia\u0107 kolejno\u015b\u0107 dzia\u0142a\u0144 WordPressa, je\u015bli jest to konieczne dla wtyczek zale\u017cnych od bbPress.<\/p>\n<\/blockquote>\n<p>Przyk\u0142ad tego mo\u017cesz zobaczy\u0107 <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">w tym pliku<\/a>.<\/p>\n<p>Jasne, ta definicja jest specyficzna dla bbPress, ale to nie znaczy, \u017ce nie ma zastosowania do tego, co robimy w WordPressie.<\/p>\n<p>Przyk\u0142ad: Je\u015bli kiedykolwiek <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">u\u017cywa\u0142e\u015b do_action<\/a> do zdefiniowania niestandardowej akcji lub skorzysta\u0142e\u015b z haka dostarczonego przez kogo\u015b innego spoza rdzenia WordPressa, to znasz strategi\u0119 wdra\u017cania podakcji.<\/p>\n<p>Innymi s\u0142owy, podakcje WordPressa to po prostu akcje, kt\u00f3rych mo\u017cemy u\u017cy\u0107 do zmiany kolejno\u015bci, w jakiej nasza wtyczka zale\u017cy od innej wtyczki.<\/p>\n<p>Spos\u00f3b, w jaki to jest zaimplementowane, mo\u017ce si\u0119 r\u00f3\u017cni\u0107 w zale\u017cno\u015bci od kontekstu Twojej pracy, ale najpopularniejszym i najbardziej \u201epoprawnym&#8221; sposobem WordPressa na to jest wykorzystanie <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">argumentu priorytetu,<\/a> kiedy Twoja wtyczka jest \u0142adowana.<\/p>\n<p>Oznacza to, \u017ce we\u017a priorytet zale\u017cno\u015bci i upewnij si\u0119, \u017ce jest ona wcze\u015bniejsza ni\u017c aktywacja wtyczki.<\/p>\n<p>Istniej\u0105 alternatywne metody, kt\u00f3re mo\u017cna zastosowa\u0107, takie jak zmiana zachowania wtyczek, gdy s\u0105 one aktywowane lub nie, ale jest to poza zakresem tego konkretnego postu i mo\u017ce negatywnie wp\u0142yn\u0105\u0107 na wra\u017cenia u\u017cytkownika (og\u00f3lnie WordPressa, nie mniej).<\/p>\n<p>Niezale\u017cnie od tego, chodzi o to, \u017ce je\u015bli chodzi o korzystanie z podakcji WordPress, programowanie obiektowe i zarz\u0105dzanie zale\u017cno\u015bciami stron trzecich, upewnij si\u0119, \u017ce decyzje, kt\u00f3re podejmujesz, nie uszkodz\u0105 projektu Twojego kodu.<\/p>\n<p>Je\u015bli ma sens sprawdzanie istnienia klasy, okej, ale je\u015bli bardziej sensowne jest czekanie, a\u017c zestaw klas lub wtyczek zostanie za\u0142adowany przed w\u0142asnym, to podakcje WordPressa prawdopodobnie b\u0119d\u0105 mia\u0142y wi\u0119kszy sens.<\/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>Korzystaj\u0105c z podakcji WordPress, OOP i zale\u017cno\u015bci zewn\u0119trznych, upewnij si\u0119, \u017ce Twoje decyzje nie spowoduj\u0105 uszkodzenia projektu Twojego kodu.<\/p>\n","protected":false},"author":1,"featured_media":221089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,845,866,815],"tags":[1169],"class_list":["post-228432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","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\/228432","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=228432"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228432\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}