{"id":229882,"date":"2022-11-13T10:52:00","date_gmt":"2022-11-13T07:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229882"},"modified":"2022-11-09T19:07:40","modified_gmt":"2022-11-09T16:07:40","slug":"adicionando-dialogos-modais-do-wordpress-com-bibliotecas-incorporadas","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/adicionando-dialogos-modais-do-wordpress-com-bibliotecas-incorporadas\/","title":{"rendered":"Adicionando di\u00e1logos modais do WordPress (com bibliotecas incorporadas)"},"content":{"rendered":"\n<p>Sempre que se trata de desenvolver solu\u00e7\u00f5es para clientes, haver\u00e1 momentos em que voc\u00ea provavelmente ter\u00e1 a tarefa de exibir informa\u00e7\u00f5es nas caixas de di\u00e1logo modais do WordPress.<\/p>\n<p>Existem muitas solu\u00e7\u00f5es dispon\u00edveis para fazer isso e quanto mais familiarizado voc\u00ea estiver com JavaScript, v\u00e1rias bibliotecas e as bibliotecas que elas t\u00eam dispon\u00edveis, mais dif\u00edcil (ou talvez at\u00e9 mais f\u00e1cil) \u00e9 escolher qual usar.<\/p>\n<p>Mas o WordPress tem uma infraestrutura integrada que torna trivial incorporar funcionalidades ao WordPress. Ent\u00e3o, em tr\u00eas posts futuros, vou abordar o seguinte:<\/p>\n<ol>\n<li>Como incorporar di\u00e1logos modais do WordPress usando bibliotecas integradas,<\/li>\n<li>Preenchendo os di\u00e1logos modais com dados,<\/li>\n<li>Preenchendo a caixa de di\u00e1logo modal com dados din\u00e2micos via Ajax.<\/li>\n<\/ol>\n<p>Devido \u00e0 natureza da s\u00e9rie, as postagens n\u00e3o ser\u00e3o consecutivas, mas todas usar\u00e3o uma tag exclusiva que voc\u00ea pode usar para marcar e se referir como uma s\u00e9rie quando as postagens forem conclu\u00eddas.<\/p>\n<p>Com isso dito, vamos falar sobre como incorporar facilmente os di\u00e1logos modais do WordPress com bibliotecas integradas.<\/p>\n<h2>Di\u00e1logos Modais do WordPress, Parte 1<\/h2>\n<p>Para come\u00e7ar, suponho que voc\u00ea tenha a base b\u00e1sica de uma p\u00e1gina de administra\u00e7\u00e3o.<\/p>\n<h3>Em p\u00e1ginas de plug-in<\/h3>\n<p>Ou seja, voc\u00ea tem tudo o que precisa para obter uma configura\u00e7\u00e3o de plug-in, ativada e, em seguida, uma p\u00e1gina exibida por meio de um menu ou submenu.<\/p>\n<p>Se n\u00e3o, confira <a href=\"https:\/\/tommcfarlin.com\/wordpress-menu-page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este post<\/a> para ver como come\u00e7ar.<\/p>\n<p>Depois de fazer isso, voc\u00ea precisar\u00e1 da infraestrutura b\u00e1sica para uma p\u00e1gina de plug-in. Esta p\u00e1gina pode ser usada simplesmente para exibir informa\u00e7\u00f5es ou pode ser usada tanto para exibir informa\u00e7\u00f5es quanto para dar ao usu\u00e1rio a capacidade de salvar op\u00e7\u00f5es.<\/p>\n<p>Para este tutorial, n\u00e3o estou particularmente interessado em dar ao usu\u00e1rio a capacidade de salvar op\u00e7\u00f5es. Em vez disso, precisamos criar uma \u00e2ncora que exibir\u00e1 uma caixa de di\u00e1logo modal sempre que for clicada.<\/p>\n<p>E os dados que ele conter\u00e1 ser\u00e3o abordados em um tutorial posterior.<\/p>\n<h3>Uma p\u00e1gina de plug-in de exemplo<\/h3>\n<p>Neste ponto, estou assumindo que voc\u00ea tem uma p\u00e1gina de plugin. Uma estrutura b\u00e1sica para isso pode ser <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-00-basic-plugin-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n  &lt;!-- TODO --&gt;\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>A partir da\u00ed, duas coisas s\u00e3o necess\u00e1rias:<\/p>\n<ol>\n<li>incorporando a biblioteca Thickbox<\/li>\n<li>adicionando uma \u00e2ncora e um cont\u00eainer que exibir\u00e1 uma caixa de di\u00e1logo modal<\/li>\n<\/ol>\n<p>Para incorporar a biblioteca Thickbox em sua p\u00e1gina de plugin, basta adicionar esta tag. Se voc\u00ea estiver seguindo algum padr\u00e3o de codifica\u00e7\u00e3o, sua p\u00e1gina provavelmente ter\u00e1 um docblock na parte superior da p\u00e1gina. \u00c9 aqui que normalmente adiciono o c\u00f3digo.<\/p>\n<p>A\u00a0 fun\u00e7\u00e3o <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_thickbox\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_thickbox<\/a> \u00e9 fornecida pelo WordPress que faz o seguinte:<\/p>\n<blockquote>\n<p>Enfileira o ThickBox js e css padr\u00e3o.<\/p>\n<\/blockquote>\n<p>Um pouco vago, certo? Tecnicamente, a descri\u00e7\u00e3o mais longa \u00e9:<\/p>\n<blockquote>\n<p>ThickBox \u00e9 um widget de di\u00e1logo de interface do usu\u00e1rio de p\u00e1gina da Web escrito em JavaScript sobre a biblioteca jQuery. Sua fun\u00e7\u00e3o \u00e9 mostrar uma \u00fanica imagem, v\u00e1rias imagens, conte\u00fado inline, conte\u00fado iframe ou conte\u00fado servido por meio de AJAX em um modal h\u00edbrido.<\/p>\n<\/blockquote>\n<p>E se voc\u00ea estiver interessado na biblioteca Thickbox por conta pr\u00f3pria, voc\u00ea pode v\u00ea-la <a href=\"http:\/\/codylindley.com\/thickbox\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nesta p\u00e1gina<\/a>.<\/p>\n<p>Enfim, de volta \u00e0 p\u00e1gina. Agora que estou adicionando-o \u00e0 minha p\u00e1gina de plug-in usando a fun\u00e7\u00e3o da API do WordPress, minha p\u00e1gina se parece <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-01-thickbox-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">com isso<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n  &lt;!-- TODO --&gt;\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>Em seguida, a cria\u00e7\u00e3o da \u00e2ncora e do elemento para exibi\u00e7\u00e3o de dados andam de m\u00e3os dadas, porque a \u00e2ncora precisa do ID do elemento que servir\u00e1 como caixa de di\u00e1logo modal.<\/p>\n<p>A \u00e2ncora precisa das seguintes informa\u00e7\u00f5es:<\/p>\n<ul>\n<li>o ID do elemento que exibir\u00e1 o modal,<\/li>\n<li>as dimens\u00f5es da referida caixa de di\u00e1logo modal<\/li>\n<\/ul>\n<p>Para este exemplo, vou configurar uma caixa de di\u00e1logo que ser\u00e1 exibida em 800\u00d7600 pixels e ter\u00e1 o ID de <strong>acme-modal-dialog<\/strong>.<\/p>\n<p><strong>Nota<\/strong>: Lembre-se de que \u00e9 uma boa ideia prefixar seus elementos com algo relacionado ao nome do seu plugin, para que n\u00e3o ocorram conflitos.<\/p>\n<p>Ent\u00e3o, vou criar uma \u00e2ncora que <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-02-adding-an-anchor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se parece com isso<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n\n  &lt;h1&gt;Acme Thickbox Demo&lt;\/h1&gt;\n  &lt;p&gt;Provides an exmaple of how to use the thickbox library within a WordPress plugin page.&lt;\/p&gt;\n\n  &lt;div id=\"acme-thickbox-content\"&gt;\n    &lt;a href=\"#\"&gt;Display The Dialog&lt;\/a&gt;\n  &lt;\/div&gt;&lt;!-- #acme-thickbox-content --&gt;\n\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>E ent\u00e3o eu vou criar um elemento <a href=\"https:\/\/gist.github.com\/tommcfarlin\/1db21634b8b7a88a963b3875553d2539#file-03-adding-the-modal-dialog-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como este<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * A basic plugin page that will eventually be used to demonstrate how to use the\n * Thickbox library included with WordPress.\n *\n * @package Acme\n *\/\nadd_thickbox();\n?&gt;\n\n&lt;div id=\"acme-thickbox-demo\" class=\"wrap\"&gt;\n\n  &lt;h1&gt;Acme Thickbox Demo&lt;\/h1&gt;\n  &lt;p&gt;Provides an exmaple of how to use the thickbox library within a WordPress plugin page.&lt;\/p&gt;\n\n  &lt;div id=\"acme-thickbox-content\"&gt;\n    &lt;a href=\"TB_inline?width=600&amp;height=550&amp;inlineId=acme-modal-dialog\" class=\"thickbox\"&gt;Display The Dialog&lt;\/a&gt;\n    &lt;div id=\"acme-modal-dialog\" style=\"display:none;\"&gt;&lt;\/div&gt;&lt;!-- #acme-modal-dialog --&gt;\n  &lt;\/div&gt;&lt;!-- #acme-thickbox-content --&gt;\n\n&lt;\/div&gt;&lt;!-- #acme-thickbox-demo --&gt;<\/code><\/pre>\n<p>E o c\u00f3digo acima \u00e9 como a vers\u00e3o final da p\u00e1gina do plugin ficar\u00e1 assim tamb\u00e9m. Ao clicar na \u00e2ncora, uma caixa de di\u00e1logo vazia deve aparecer com as dimens\u00f5es especificadas (ou seja, 800\u00d7600 pixels).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165812-61e789a51e4aa.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-165812-61e789a51e4aa.png\" alt=\"Adicionando di\u00e1logos modais do WordPress (com bibliotecas incorporadas)\" ><\/a><\/p>\n<p>Claro, ele estar\u00e1 vazio, pois n\u00e3o exibir\u00e1 nenhum dado.<\/p>\n<h2>Exibindo dados<\/h2>\n<p>Na pr\u00f3xima postagem da s\u00e9rie, mostrarei como exibir dados no contexto da caixa de di\u00e1logo.<\/p>\n<p>\u00c9 f\u00e1cil, mas \u00e9 um bom ponto de partida se voc\u00ea deseja come\u00e7ar a incorporar dados din\u00e2micos por meio da API REST ou Ajax. Mas vou cobrir isso antes do final deste.<\/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>Quando se trata de desenvolver solu\u00e7\u00f5es para clientes, haver\u00e1 momentos em que voc\u00ea provavelmente ter\u00e1 a tarefa de exibir informa\u00e7\u00f5es nas caixas de di\u00e1logo modais do WordPress.<\/p>\n","protected":false},"author":1,"featured_media":165813,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,846,867],"tags":[1170],"class_list":["post-229882","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229882","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=229882"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229882\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165813"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}