{"id":228368,"date":"2022-10-23T09:53:00","date_gmt":"2022-10-23T06:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228368"},"modified":"2022-11-09T02:05:26","modified_gmt":"2022-11-08T23:05:26","slug":"naer-ska-man-anvaenda-wordpress-subaktioner-och-vad-aer-de","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/naer-ska-man-anvaenda-wordpress-subaktioner-och-vad-aer-de\/","title":{"rendered":"N\u00e4r ska man anv\u00e4nda WordPress-subaktioner (och vad \u00e4r de?)"},"content":{"rendered":"\n<p>Jag gick nyligen igenom processen med att anv\u00e4nda en klasskonstruktor f\u00f6r att <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/stoppa-exekvering-av-plugin-utan-ett-beroende\/\" title=\"f\u00f6rhindra att ett plugin fungerar\" >f\u00f6rhindra att ett plugin fungerar<\/a> om det ett f\u00f6rv\u00e4ntat beroende inte laddas.<\/p>\n<p>\u00c4ven om jag inte anser att denna strategi \u00e4r ett problem f\u00f6r ett eng\u00e5ngsberoende eller i vissa situationer, finns det s\u00e4tt som detta kan leda till kodlukt.<\/p>\n<p>Det hindrar oss ocks\u00e5 fr\u00e5n att anv\u00e4nda en inbyggd funktion i Core som kallas WordPress-subactions:<\/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>Men innan jag tittar p\u00e5 subaktioner vill jag se till att jag \u00e4r tydlig med problemen med att anv\u00e4nda villkorsmetoden (versus subaktioner) kan f\u00f6da med kodlukter.<\/p>\n<h2>WordPress Subactions<\/h2>\n<p>Det finns m\u00e5nga s\u00e4tt som kodlukter kan f\u00f6rklaras p\u00e5, men mitt favorits\u00e4tt <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kommer fr\u00e5n Martin Fowler<\/a> :<\/p>\n<blockquote>\n<p>\u2026 lukter \u00e4r vissa strukturer i koden som indikerar brott mot grundl\u00e4ggande designprinciper och p\u00e5verkar designkvaliteten negativt.<\/p>\n<\/blockquote>\n<p>Det finns en annan bra sida om <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kodlukter p\u00e5 Source Making<\/a> som jag rekommenderar att du l\u00e4ser om du har en chans.<\/p>\n<p>Och s\u00e4ttet som villkor kan leda till kodlukt \u00e4r enkelt: det har potential att beskr\u00e4pa din kod med en enorm upps\u00e4ttning uttalanden som inkluderar m\u00e5nga <a href=\"https:\/\/php.net\/manual\/en\/function.class-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">class_exists-<\/a> kontroller.<\/p>\n<p>Och det \u00e4r ett problem.<\/p>\n<p>Varje g\u00e5ng du introducerar ett annat beroende i din kod, l\u00e4gger du till ytterligare en villkorlig kontroll f\u00f6r att se om en klass finns i WordPress-applikationen.<\/p>\n<p>Jag tror att det \u00e4r okej att g\u00f6ra det h\u00e4r med ett enda beroende \u2013 kanske till och med tv\u00e5 beroenden \u2013 och om du arbetar &quot;tillr\u00e4ckligt h\u00f6gt&quot; i din arkitektur, men det \u00e4r inte hur du ska hantera det h\u00e4r med m\u00e5nga beroenden eller p\u00e5 en l\u00e4gre niv\u00e5 i ditt plugin.<\/p>\n<p>Det \u00e4r d\u00e4r WordPress subactions kommer in i bilden. Du kan se en lista \u00f6ver subactions i tweeten via John ovan.<\/p>\n<p>Det finns en officiell definition av under\u00e5tg\u00e4rder i <a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bbPress Codex<\/a> ocks\u00e5:<\/p>\n<blockquote>\n<p>Dessa interna \u00e5tg\u00e4rder kan ses som &quot;under\u00e5tg\u00e4rder&quot; och l\u00e5ter dig l\u00e4gga till eller omordna WordPress-\u00e5tg\u00e4rder efter behov f\u00f6r plugins som \u00e4r beroende av bbPress.<\/p>\n<\/blockquote>\n<p>Och du kan se ett exempel p\u00e5 det <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">i den h\u00e4r filen<\/a>.<\/p>\n<p>Visst, den h\u00e4r definitionen \u00e4r specifik f\u00f6r bbPress, men det betyder inte att den inte \u00e4r till\u00e4mplig p\u00e5 det vi g\u00f6r i WordPress.<\/p>\n<p>Exempel: Om du n\u00e5gonsin har anv\u00e4nt <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> f\u00f6r att definiera en anpassad \u00e5tg\u00e4rd, eller om du har utnyttjat en hook fr\u00e5n n\u00e5gon annan utanf\u00f6r WordPress-k\u00e4rnan, d\u00e5 \u00e4r du bekant med strategin att implementera en del\u00e5tg\u00e4rd.<\/p>\n<p>Med andra ord \u00e4r WordPress-under\u00e5tg\u00e4rder helt enkelt \u00e5tg\u00e4rder som vi kan anv\u00e4nda f\u00f6r att \u00e4ndra ordningen i vilken v\u00e5rt plugin beror p\u00e5 ett annat plugin.<\/p>\n<p>Hur detta implementeras kan variera inom ramen f\u00f6r ditt arbete, men det mest popul\u00e4ra och mest &quot;korrekta&quot; WordPress-s\u00e4ttet att g\u00f6ra detta p\u00e5 \u00e4r utan tvekan att dra f\u00f6rdel av <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">prioritetsargumentet<\/a> f\u00f6r n\u00e4r din plugin laddas.<\/p>\n<p>Det vill s\u00e4ga, ta prioritet f\u00f6r beroendet och se till att det \u00e4r tidigare \u00e4n n\u00e4r din plugin aktiveras.<\/p>\n<p>Det finns alternativa metoder som kan anv\u00e4ndas, som att \u00e4ndra pluginbeteende n\u00e4rhelst de aktiveras eller inte, men detta ligger utanf\u00f6r omfattningen av det h\u00e4r inl\u00e4gget, och det kan negativt f\u00f6r\u00e4ndra anv\u00e4ndarupplevelsen (f\u00f6r WordPress i allm\u00e4nhet, inte mindre).<\/p>\n<p>Oavsett vad \u00e4r po\u00e4ngen att n\u00e4r det kommer till att anv\u00e4nda WordPress-subaktioner, objektorienterad programmering och hantering av tredjepartsberoenden, se till att de beslut du fattar inte kommer att skada designen av din kod.<\/p>\n<p>Om det \u00e4r vettigt att kontrollera f\u00f6rekomsten av en klass, okej, men om det \u00e4r mer meningsfullt att v\u00e4nta tills en upps\u00e4ttning klasser eller plugins har laddats f\u00f6re din egen, \u00e4r WordPress-under\u00e5tg\u00e4rder troligen mer meningsfulla.<\/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>N\u00e4r du anv\u00e4nder WordPress subactions, OOP och tredjepartsberoenden, se till att dina beslut inte kommer att skada designen av din kod.<\/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":[848,901,922,818,724,868],"tags":[1173],"class_list":["post-228368","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-oevrig","category-plugins-3","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228368","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=228368"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228368\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}