{"id":231142,"date":"2022-12-13T11:02:00","date_gmt":"2022-12-13T08:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231142"},"modified":"2022-12-13T11:03:48","modified_gmt":"2022-12-13T08:03:48","slug":"organizando-as-telas-de-configuracoes-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/organizando-as-telas-de-configuracoes-do-wordpress\/","title":{"rendered":"Organizando as telas de configura\u00e7\u00f5es do WordPress"},"content":{"rendered":"\n<p>Como muitos de n\u00f3s continuamos avan\u00e7ando com o <strong><a href=\"https:\/\/php.net\/manual\/en\/migration70.new-features.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP7+<\/a><\/strong>, podemos continuar aproveitando muitos novos recursos que a linguagem oferece.<\/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=\"Organizando as telas de configura\u00e7\u00f5es do WordPress\"><\/a><\/p>\n<p>Enquanto isso, por\u00e9m, ainda existem recursos do PHP e softwares relacionados que podemos usar para ajudar a agilizar nosso desenvolvimento. O menos deles (e o que eu <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/namespaces-e-carregamento-automatico-no-wordpress\/\" title=\"escrevi e falei\">escrevi e falei<\/a><\/strong> um pouco) s\u00e3o os namespaces.<\/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=\"Organizando as telas de configura\u00e7\u00f5es do WordPress\"><\/a><\/p>\n<p>Aqui est\u00e1 a coisa, no entanto: eu gosto de ter os arquivos e diret\u00f3rios do meu plugin estruturados para que eles sejam organizados para espelhar as conven\u00e7\u00f5es de namespace que eles seguem. E isso pode ser feito para taxonomias, meta boxes, objetos de dom\u00ednio, funcionalidades relacionadas a banco de dados e assim por diante.<\/p>\n<p>Neste post, por\u00e9m, quero falar sobre uma maneira de organizar as telas de configura\u00e7\u00f5es do WordPress a partir das estruturas organizacionais l\u00f3gicas \u2013 ou seja, a localiza\u00e7\u00e3o do sistema de arquivos \u2013 e as virtuais \u2013 ou seja, seus namespaces.<\/p>\n<h2>Organizando as telas de configura\u00e7\u00f5es do WordPress<\/h2>\n<p>O primeiro ponto que quero fazer \u00e9 o seguinte: embora eu esteja falando sobre organizar as telas de configura\u00e7\u00f5es do WordPress, n\u00e3o estou falando nada sobre a API. Em vez disso, assuma que para este post estou falando sobre o seguinte:<\/p>\n<ul>\n<li>um menu personalizado que tem uma <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_menu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">p\u00e1gina de menu associada,<\/a><\/strong><\/li>\n<li>uma p\u00e1gina de menu que processa os requisitos para uma p\u00e1gina de configura\u00e7\u00f5es (como o <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_nonce_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">campo nonce<\/a><\/strong> e assim por diante)<\/li>\n<li>uma parcial que cont\u00e9m as configura\u00e7\u00f5es reais (ou v\u00e1rias parciais se voc\u00ea deseja incluir v\u00e1rias configura\u00e7\u00f5es).<\/li>\n<\/ul>\n<p>N\u00e3o vou falar sobre o processo de sanitiza\u00e7\u00e3o, serializa\u00e7\u00e3o, recupera\u00e7\u00e3o, valida\u00e7\u00e3o e exibi\u00e7\u00e3o. Isso \u00e9 puramente organizacional.<\/p>\n<h3>Pensando no processo<\/h3>\n<p>Dado que vamos organizar nossos arquivos por meio de diret\u00f3rios que tamb\u00e9m mapeiam 1:1 com namespaces, vamos pensar exatamente no que vamos precisar. A forma como abordo \u00e9 esta:<\/p>\n<ol>\n<li>Estamos criando algo especificamente para o aplicativo WordPress de contexto. Isso indica um namespace.<\/li>\n<li>Vamos criar um menu de administra\u00e7\u00e3o, o que significa que estamos trabalhando na \u00e1rea de administra\u00e7\u00e3o do WordPress, portanto, outro namespace, e com menus, que s\u00e3o outro namespace.<\/li>\n<li>Em seguida, precisamos de arquivos para exibir a tela padr\u00e3o do WordPress, ent\u00e3o precisaremos de um namespace Views,<\/li>\n<li>E ent\u00e3o precisaremos de um c\u00f3digo espec\u00edfico de dom\u00ednio para cair na exibi\u00e7\u00e3o, ent\u00e3o, em \u00faltima an\u00e1lise, precisaremos de um diret\u00f3rio Partials (e, portanto, de um namespace).<\/li>\n<\/ol>\n<p>Portanto, a organiza\u00e7\u00e3o l\u00f3gica final dos dados seria algo assim:<\/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=\"Organizando as telas de configura\u00e7\u00f5es do WordPress\"><\/a><\/p>\n<p>Talvez a coisa mais importante a ser observada sobre essa organiza\u00e7\u00e3o espec\u00edfica de arquivos \u00e9 que a classe <strong>AdminMenu<\/strong> \u00e9 uma classe base da qual todas as classes espec\u00edficas (ou mais concretas) podem herdar.<\/p>\n<p>Isso significa que a classe <strong>AcmeAdminMenu<\/strong> herda certas propriedades e fun\u00e7\u00f5es dela e ent\u00e3o implementa sua l\u00f3gica ou adiciona sua l\u00f3gica tamb\u00e9m.<\/p>\n<h3>Espa\u00e7amento entre nomes de cada arquivo<\/h3>\n<p>Quando voc\u00ea organiza seus arquivos dessa maneira, os namespaces se tornam quase auto-evidentes, n\u00e3o \u00e9? Aqui est\u00e1 o namespace para cada um dos arquivos:<\/p>\n<ul>\n<li>WordPressAdminMenuAdminMenu<\/li>\n<li>WordPressAdminMenuAcmeAdminMenu<\/li>\n<li>WordPressAdminMenuViewsSettings<\/li>\n<li>WordPressAdminMenuViewsSettingsPartials<\/li>\n<\/ul>\n<p>Observe que, como o <strong>acme-settings.php<\/strong> \u00e9 tecnicamente apenas uma marca\u00e7\u00e3o para op\u00e7\u00f5es de renderiza\u00e7\u00e3o, ele n\u00e3o precisa necessariamente ter namespace porque est\u00e1 inclu\u00eddo na <strong>View<\/strong> que o renderiza.<\/p>\n<p>Independentemente disso, se voc\u00ea \u00e9 f\u00e3 de manter as coisas o mais organizadas poss\u00edvel, s\u00f3 faz sentido aninhar uma parcial dentro de um diret\u00f3rio chamado exatamente isso.<\/p>\n<h2>E quanto ao c\u00f3digo?<\/h2>\n<p>Se voc\u00ea estiver interessado em ver o c\u00f3digo para algo assim, estou pensando em montar um pequeno plugin que demonstre como tudo isso se encaixa. Afinal, isso \u00e9 um pouco de alto n\u00edvel, n\u00e3o \u00e9? Quero dizer, n\u00e3o h\u00e1 implementa\u00e7\u00e3o.<\/p>\n<p>Ent\u00e3o, novamente, se isso ajudar a apontar a dire\u00e7\u00e3o certa para um projeto atual ou futuro, pode ser suficiente.<\/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>Quero falar sobre uma maneira de organizar as telas de configura\u00e7\u00f5es do WordPress a partir da l\u00f3gica e das estruturas organizacionais virtuais.<\/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":[898,722,837,806,867],"tags":[1170],"class_list":["post-231142","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231142","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=231142"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231142\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236109"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}