{"id":231382,"date":"2022-12-19T10:31:00","date_gmt":"2022-12-19T07:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231382"},"modified":"2022-12-07T10:03:14","modified_gmt":"2022-12-07T07:03:14","slug":"widgets-do-wordpress-refatoracao-parte-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/widgets-do-wordpress-refatoracao-parte-9\/","title":{"rendered":"Widgets do WordPress: Refatora\u00e7\u00e3o, Parte 9"},"content":{"rendered":"\n<p>Embora o \u00faltimo post desta s\u00e9rie de refatora\u00e7\u00e3o n\u00e3o tenha sido incrivelmente longo, acho que foi um pouco denso. Ou seja, foi necess\u00e1rio muito trabalho para colocar o c\u00f3digo em um local onde possamos trabalhar com ele mais facilmente.<\/p>\n<p>Mas \u00e9 s\u00f3 isso: todo o trabalho que fizemos deve facilitar o avan\u00e7o com o restante do c\u00f3digo que precisamos escrever.<\/p>\n<p>E para ter certeza de que estamos aproveitando o trabalho e a base que estabelecemos at\u00e9 agora, vamos completar a s\u00e9rie com um conjunto de artigos mais curtos e mais focados que devem levar menos tempo para ler, implementar e entender o que estamos fazendo com o c\u00f3digo.<\/p>\n<h2>The WordPress Widget Boilerplate: Refatorando Parte 9<\/h2>\n<p>Relembrando do \u00faltimo post:<\/p>\n<blockquote>\n<p>Em seguida, continuaremos desenvolvendo a funcionalidade para a \u00e1rea administrativa do widget. Depois disso, voltaremos nossa aten\u00e7\u00e3o para o lado p\u00fablico do widget, bem como para a funcionalidade de serializa\u00e7\u00e3o.<\/p>\n<\/blockquote>\n<p>E isso nos prepara exatamente para onde estamos indo neste post em particular. Ou seja, vamos escrever um front-end administrativo que nos permite:<\/p>\n<ul>\n<li>definir um t\u00edtulo para o widget,<\/li>\n<li>definir o conte\u00fado de texto para o widget,<\/li>\n<li>e alternar se queremos ou n\u00e3o mostrar o t\u00edtulo.<\/li>\n<\/ul>\n<p>N\u00e3o \u00e9 para ser inovador nem para ser o tipo de widget que qualquer outra pessoa pode querer vender. Em vez disso, pretende mostrar como podemos usar o que temos para criar algo semelhante ao que j\u00e1 vimos no WordPress e como empregamos pr\u00e1ticas s\u00f3lidas de programa\u00e7\u00e3o.<\/p>\n<h3>A interface do usu\u00e1rio: uma primeira passagem<\/h3>\n<p>Depois do nosso \u00faltimo trabalho, temos um widget que aparece na \u00e1rea administrativa do WordPress e pode at\u00e9 ser movido para uma barra lateral ou outra \u00e1rea widgetizada; no entanto, ele realmente n\u00e3o faz nada.<\/p>\n<p>Por enquanto, vamos adicionar tr\u00eas elementos \u00e0 interface do usu\u00e1rio:<\/p>\n<ol>\n<li>adicione uma entrada de texto para o t\u00edtulo do widget,<\/li>\n<li>incluir um elemento textarea para exibir o que pode ser um par\u00e1grafo de texto,<\/li>\n<li>e por \u00faltimo, adicione uma caixa de sele\u00e7\u00e3o para alternar as informa\u00e7\u00f5es do t\u00edtulo.<\/li>\n<\/ol>\n<p>Para fazer isso, precisaremos editar um arquivo no\u00a0 diret\u00f3rio <strong>Views<\/strong>. Ou seja, vamos atualizar o\u00a0 arquivo <strong>Admin.php<\/strong>. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Come\u00e7aremos com os elementos<\/a> exatamente conforme necess\u00e1rio, sem marca\u00e7\u00e3o externa.<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Ainda n\u00e3o ser\u00e1 muito para se olhar no front-end, mas est\u00e1 nos aproximando de onde queremos estar.<\/p>\n<h3>Uma aula para administradores<\/h3>\n<p>Em seguida, queremos ter certeza de que estamos mantendo um alto n\u00edvel de coes\u00e3o com nossas classes. Isso significa que n\u00e3o precisamos de uma \u00fanica classe para fazer tudo para administra\u00e7\u00e3o, exibi\u00e7\u00e3o e todos os outros trabalhos exigidos pela API do WordPress.<\/p>\n<p>Para isso, criaremos uma segunda classe chamada <strong>WidgetAdmin<\/strong> no diret\u00f3rio e namespace do <strong>WordPress .<\/strong><\/p>\n<p>Neste arquivo, incluiremos <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o seguinte c\u00f3digo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of WordPress Widget Boilerplate\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\n\/**\n * Manages the administrative functionality of the widget.\n *\/\nclass WidgetAdmin extends Widget\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct($widgetSlug)\n    {\n        parent::__construct($widgetSlug);\n    }\n\n    \/**\n     * Displays the administrative view of the form and includes the options\n     * for the instance of the widget as arguments passed into the function.\n     *\n     * @param array $instance the options for the instance of this widget.\n     *\/\n    public function form($instance)\n    {\n        include plugin_dir_path(__FILE__).'Views\/Admin.php';\n    }\n}\n<\/code><\/pre>\n<p>Ent\u00e3o, no c\u00f3digo original para instanciar nosso widget, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vamos alterar esta linha<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new Widget('widget-name'));\n}<\/code><\/pre>\n<p>Para ficar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new WidgetAdmin('widget-name'));\n}<\/code><\/pre>\n<p>Nos pr\u00f3ximos artigos, isso continuar\u00e1 a evoluir, mas, como voc\u00ea pode ver, estamos nos certificando de que temos uma \u00fanica classe base de funcionalidade para conversar com o WordPress e uma classe espec\u00edfica para renderizar o formul\u00e1rio administrativo.<\/p>\n<h3>A interface do usu\u00e1rio: uma segunda passagem<\/h3>\n<p>Por fim, vamos limpar o formul\u00e1rio para que ele tenha um pouco mais de UX s\u00f3lido que combine bem com a \u00e1rea de administra\u00e7\u00e3o do WordPress como um todo.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pegue o seguinte c\u00f3digo<\/a> :<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>E atualize-o para que fique <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/a> :<\/p>\n<pre><code>&lt;div class=\"widget-content\"&gt;\n    &lt;p&gt;\n        &lt;input\n            type=\"text\"\n            name=\"widget-title\"\n            value=\"\"\n            placeholder=\"Widget Title\"\n            class=\"widefat\"\n        \/&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;textarea\n            name=\"widget-content\"\n            placeholder=\"Widget Content\"\n            style=\"width:100%;\"&gt;&lt;\/textarea&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;input\n            type=\"checkbox\"\n            value=\"1\"\n            name=\"widget-title-enabled\"\n            class=\"checkbox\"\n        \/&gt;\n        &lt;label for=\"widget-title-enabled\"&gt;Display Title?&lt;\/label&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- .widget-content --&gt;<\/code><\/pre>\n<p>Supondo que tudo correu bem, agora voc\u00ea deve ver algo parecido com isto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.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-160909-61e71613309d7.png\" alt=\"Widgets do WordPress: Refatora\u00e7\u00e3o, Parte 9\" ><\/a><\/p>\n<p>E \u00e9 a\u00ed que vamos parar com os recursos administrativos para este post. Lembre-se de que voc\u00ea tamb\u00e9m pode acompanhar tudo isso no branch de desenvolvimento no GitHub.<\/p>\n<h2>Sanitiza\u00e7\u00e3o e serializa\u00e7\u00e3o<\/h2>\n<p>No pr\u00f3ximo post, veremos o que \u00e9 necess\u00e1rio para higienizar e serializar (ou limpar e salvar) o conte\u00fado do nosso widget.<\/p>\n<p>Tamb\u00e9m nos certificaremos de exibir as informa\u00e7\u00f5es na \u00e1rea administrativa depois que as informa\u00e7\u00f5es forem salvas e recuperadas.<\/p>\n<p>Por fim, a heran\u00e7a e a coes\u00e3o de classes continuar\u00e3o evoluindo, mas, por enquanto, concentre-se no que \u00e9 abordado neste post e continuaremos no pr\u00f3ximo artigo.<\/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>Queremos ter certeza de que estamos nos mantendo consistentes em manter um alto n\u00edvel de coes\u00e3o com nossas classes come\u00e7ando com a administra\u00e7\u00e3o de widgets do WordPress.<\/p>\n","protected":false},"author":1,"featured_media":234899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[722,806],"tags":[1170],"class_list":["post-231382","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvedor","category-php-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231382","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=231382"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231382\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}