{"id":231191,"date":"2022-12-14T13:54:00","date_gmt":"2022-12-14T10:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231191"},"modified":"2022-12-14T13:54:55","modified_gmt":"2022-12-14T10:54:55","slug":"uma-funcao-auxiliar-para-avisos-administrativos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/uma-funcao-auxiliar-para-avisos-administrativos\/","title":{"rendered":"Uma fun\u00e7\u00e3o auxiliar para avisos administrativos"},"content":{"rendered":"\n<p>Se voc\u00ea est\u00e1 no neg\u00f3cio de construir plugins, ou mesmo temas, e est\u00e1 incorporando pr\u00e1ticas orientadas a objetos em seu trabalho, ent\u00e3o voc\u00ea provavelmente se depara com algum tipo de serializa\u00e7\u00e3o. E um dos aspectos da serializa\u00e7\u00e3o \u00e9 que requer algum tipo de feedback para o usu\u00e1rio.<\/p>\n<p>Esta pode ser uma mensagem de sucesso, uma mensagem de falha ou uma mensagem simplesmente avisando o usu\u00e1rio de que algo deu errado ou talvez algo deva ser atualizado.<\/p>\n<p>Seja qual for o caso, o WordPress oferece todas as facilidades que precisamos; no entanto, podemos facilitar ainda mais para n\u00f3s mesmos escrevendo uma fun\u00e7\u00e3o auxiliar para avisos de administra\u00e7\u00e3o. \u00c9 simples tamb\u00e9m.<\/p>\n<h2>Avisos administrativos: uma fun\u00e7\u00e3o auxiliar<\/h2>\n<p>Quando se trata de escrever avisos de administra\u00e7\u00e3o, \u00e9 importante familiarizar-se com <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/admin_notices\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">o gancho apropriado.<\/a><\/strong><\/p>\n<p>A partir da\u00ed, voc\u00ea tamb\u00e9m precisa saber os seguintes nomes de classe:<\/p>\n<ul>\n<li>aviso-erro<\/li>\n<li>aviso-sucesso<\/li>\n<li>aviso-aviso<\/li>\n<li>aviso-informa\u00e7\u00f5es<\/li>\n<\/ul>\n<p>Com isso, \u00e9 poss\u00edvel escrever uma fun\u00e7\u00e3o auxiliar que use o gancho acima e uma <strong><a href=\"https:\/\/php.net\/manual\/en\/functions.anonymous.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fun\u00e7\u00e3o an\u00f4nima<\/a><\/strong> (ou um <strong><a href=\"https:\/\/php.net\/manual\/en\/class.closure.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">closure<\/a><\/strong>) para conseguir exatamente o que voc\u00ea precisa. Mas primeiro observe o seguinte:<\/p>\n<blockquote>\n<p>Fun\u00e7\u00f5es an\u00f4nimas, tamb\u00e9m conhecidas como closures, permitem a cria\u00e7\u00e3o de fun\u00e7\u00f5es que n\u00e3o possuem nome especificado. Eles s\u00e3o mais \u00fateis como o valor dos par\u00e2metros de <a href=\"https:\/\/php.net\/manual\/en\/language.pseudo-types.php#language.types.callback\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">retorno<\/a> de chamada, mas t\u00eam muitos outros usos.<\/p>\n<\/blockquote>\n<p>Com isso dito, voc\u00ea deve ter tudo o que precisa para escrever seu ajudante e ter uma ideia de quando esvazi\u00e1-lo.<\/p>\n<p>Primeiro, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-00-display-admin-notice-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a fun\u00e7\u00e3o auxiliar:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Provides an easy eay to display an administration notice based on the incoming\n * class and message.\n *\n * @param string $class   the class to add to the notice (warning, error, success)\n * @param string $message the message to display in the administration notice area\n *\/\nprotected function displayAdminNotice($class, $message)\n{\n    add_action(\n        'admin_notices',\n        function() use ($class, $message) {\n            printf(\n                '&lt;div class=\"%1$s\"&gt;&lt;p&gt;%2$s&lt;\/p&gt;&lt;\/div&gt;',\n                esc_attr($class),\n                esc_html($message)\n            );\n        }\n    );\n}<\/code><\/pre>\n<p>Em seguida, digamos que a solicita\u00e7\u00e3o que est\u00e1 sendo feita cont\u00e9m dados inv\u00e1lidos. Para lidar com isso, voc\u00ea usaria o auxiliar acima <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-01-admin-notice-error-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como o seguinte:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nif (!$this-&gt;hasValidInput()) {\n    $this-&gt;displayAdminNotice(\n        'notice notice-error',\n        'You must specify a valid email address and license key.'\n    );\n}<\/code><\/pre>\n<p>Por outro lado, digamos que <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a7b10e37c4128913e4069f2825a443cd#file-02-admin-notice-success-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tudo funcione bem:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nif (update_option('acme-option', $values)) {\n    $this-&gt;displayAdminNotice(\n      'notice notice-success',\n      'The options were updated successfully!'\n  );\n}<\/code><\/pre>\n<p>Como voc\u00ea pode ver, essa fun\u00e7\u00e3o usa ganchos nativos do WordPress, recursos do PHP e tamb\u00e9m cria um m\u00e9todo que pode ser <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/escrevendo-testes-de-unidade-com-phpunit-parte-1-a-configuracao\/\" title=\"testado por unidade,\">testado por unidade,<\/a><\/strong> o que importa se voc\u00ea deseja escrever <strong><a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aplicativos da Web test\u00e1veis \u200b\u200bno WordPress.<\/a><\/strong><\/p>\n<p>E mesmo que n\u00e3o, voc\u00ea tem uma maneira mais f\u00e1cil de manter seu c\u00f3digo um pouco mais <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DRY<\/a><\/strong> do que antes.<\/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>O WordPress fornece todas as facilidades que precisamos; no entanto, podemos facilitar escrevendo uma fun\u00e7\u00e3o auxiliar para avisos de administra\u00e7\u00e3o. \u00c9 simples tamb\u00e9m.<\/p>\n","protected":false},"author":1,"featured_media":236170,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,867],"tags":[1170],"class_list":["post-231191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231191","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=231191"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231191\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236170"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}