{"id":229030,"date":"2022-10-23T10:07:00","date_gmt":"2022-10-23T07:07:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229030"},"modified":"2022-11-09T05:15:48","modified_gmt":"2022-11-09T02:15:48","slug":"quando-usar-as-subacoes-do-wordpress-e-quais-sao-elas","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/quando-usar-as-subacoes-do-wordpress-e-quais-sao-elas\/","title":{"rendered":"Quando usar as suba\u00e7\u00f5es do WordPress (e quais s\u00e3o elas?)"},"content":{"rendered":"\n<p>Recentemente, passei pelo processo de usar o construtor de uma classe para <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/parar-a-execucao-do-plug-in-sem-dependencia\/\" title=\"impedir que um plug-in funcione\" >impedir que um plug-in funcione<\/a> se uma depend\u00eancia esperada n\u00e3o for carregada.<\/p>\n<p>Embora eu n\u00e3o considere essa estrat\u00e9gia espec\u00edfica um problema para uma depend\u00eancia \u00fanica ou em determinadas situa\u00e7\u00f5es, existem maneiras de isso pode levar a cheiros de c\u00f3digo.<\/p>\n<p>Tamb\u00e9m nos impede de usar um recurso nativo do Core chamado suba\u00e7\u00f5es do 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>Mas antes de olhar para as suba\u00e7\u00f5es, quero ter certeza de que estou ciente dos problemas que o uso da abordagem condicional (versus suba\u00e7\u00f5es) pode gerar cheiros de c\u00f3digo.<\/p>\n<h2>Suba\u00e7\u00f5es do WordPress<\/h2>\n<p>H\u00e1 muitas maneiras de explicar os cheiros de c\u00f3digo, mas minha maneira favorita <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vem de Martin Fowler<\/a> :<\/p>\n<blockquote>\n<p>\u2026os cheiros s\u00e3o certas estruturas no c\u00f3digo que indicam viola\u00e7\u00e3o de princ\u00edpios fundamentais de design e impactam negativamente a qualidade do design.<\/p>\n<\/blockquote>\n<p>H\u00e1 outra \u00f3tima p\u00e1gina sobre <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cheiros de c\u00f3digo no Source Making<\/a> que eu recomendo ler se voc\u00ea tiver uma chance.<\/p>\n<p>E a maneira como as condicionais podem levar a cheiros de c\u00f3digo \u00e9 simples: tem potencial para encher seu c\u00f3digo com um conjunto enorme de instru\u00e7\u00f5es que incluem muitas verifica\u00e7\u00f5es de <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>E isso \u00e9 um problema.<\/p>\n<p>Cada vez que voc\u00ea introduz outra depend\u00eancia em seu c\u00f3digo, voc\u00ea acaba adicionando mais uma verifica\u00e7\u00e3o condicional para ver se uma classe est\u00e1 presente no aplicativo WordPress.<\/p>\n<p>Eu acredito que n\u00e3o h\u00e1 problema em fazer isso com uma \u00fanica depend\u00eancia &#8211; talvez at\u00e9 duas depend\u00eancias &#8211; e se voc\u00ea estiver trabalhando &quot;alto o suficiente&quot; em sua arquitetura, mas n\u00e3o \u00e9 assim que lidar adequadamente com muitas depend\u00eancias nem em um n\u00edvel mais baixo em seu plug-in.<\/p>\n<p>\u00c9 a\u00ed que as suba\u00e7\u00f5es do WordPress entram em cena. Voc\u00ea pode ver uma lista de suba\u00e7\u00f5es no tweet via John acima.<\/p>\n<p>H\u00e1 uma defini\u00e7\u00e3o oficial de sub-a\u00e7\u00f5es no <a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bbPress Codex<\/a> tamb\u00e9m:<\/p>\n<blockquote>\n<p>Essas a\u00e7\u00f5es internas podem ser consideradas como &#8220;suba\u00e7\u00f5es&quot; e permitem que voc\u00ea adicione ou reordene as a\u00e7\u00f5es do WordPress conforme necess\u00e1rio para plugins que dependem do bbPress.<\/p>\n<\/blockquote>\n<p>E voc\u00ea pode ver um exemplo disso <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">neste arquivo<\/a>.<\/p>\n<p>Claro, essa defini\u00e7\u00e3o \u00e9 espec\u00edfica do bbPress, mas isso n\u00e3o significa que n\u00e3o seja aplic\u00e1vel ao que fazemos no WordPress.<\/p>\n<p>Caso em quest\u00e3o: se voc\u00ea j\u00e1 usou <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> para definir uma a\u00e7\u00e3o personalizada ou se aproveitou de um gancho fornecido por outra pessoa fora do n\u00facleo do WordPress, ent\u00e3o voc\u00ea est\u00e1 familiarizado com a estrat\u00e9gia de implementa\u00e7\u00e3o de uma suba\u00e7\u00e3o.<\/p>\n<p>Em outras palavras, as suba\u00e7\u00f5es do WordPress s\u00e3o simplesmente a\u00e7\u00f5es que podemos usar para alterar a ordem em que nosso plugin depende de outro plugin.<\/p>\n<p>Como isso \u00e9 implementado pode variar dentro do contexto do seu trabalho, mas a maneira mais popular e &#8220;correta&#8221; do WordPress de fazer isso \u00e9, sem d\u00favida, aproveitar o <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">argumento de prioridade<\/a> para quando seu plugin \u00e9 carregado.<\/p>\n<p>Ou seja, tome a prioridade da depend\u00eancia e certifique-se de que ela seja anterior \u00e0 ativa\u00e7\u00e3o do seu plug-in.<\/p>\n<p>Existem m\u00e9todos alternativos que podem ser usados, como alterar o comportamento do plugin sempre que s\u00e3o ativados ou n\u00e3o, mas isso est\u00e1 fora do escopo deste post em particular, e pode alterar negativamente a experi\u00eancia do usu\u00e1rio (do WordPress em geral, nada menos).<\/p>\n<p>Independentemente disso, o ponto \u00e9 que, quando se trata de usar suba\u00e7\u00f5es do WordPress, programa\u00e7\u00e3o orientada a objetos e gerenciamento de depend\u00eancias de terceiros, certifique-se de que as decis\u00f5es que voc\u00ea est\u00e1 tomando n\u00e3o prejudiquem o design do seu c\u00f3digo.<\/p>\n<p>Se fizer sentido verificar a exist\u00eancia de uma classe, tudo bem, mas se fizer mais sentido esperar at\u00e9 que um conjunto de classes ou plugins seja carregado antes do seu, ent\u00e3o as suba\u00e7\u00f5es do WordPress provavelmente far\u00e3o mais sentido.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ao usar suba\u00e7\u00f5es do WordPress, OOP e depend\u00eancias de terceiros, certifique-se de que suas decis\u00f5es n\u00e3o prejudicar\u00e3o o design do seu c\u00f3digo.<\/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":[898,722,920,816,846,867],"tags":[1170],"class_list":["post-229030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-outro","category-plug-ins","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=229030"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229030\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}