{"id":229927,"date":"2022-11-14T13:35:00","date_gmt":"2022-11-14T10:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229927"},"modified":"2022-11-14T13:36:08","modified_gmt":"2022-11-14T10:36:08","slug":"obter-enderecos-de-usuarios-no-wordpress-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/obter-enderecos-de-usuarios-no-wordpress-parte-2\/","title":{"rendered":"Obter endere\u00e7os de usu\u00e1rios no WordPress, parte 2"},"content":{"rendered":"\n<p>No <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/obter-enderecos-de-usuarios-no-wordpress-parte-1\/\" title=\"post anterior\">post anterior<\/a>, comecei a compartilhar como baixar endere\u00e7os de e-mail de usu\u00e1rios via JSON no WordPress (usando Ajax). O primeiro artigo abordou:<\/p>\n<ol>\n<li>registrando o JavaScript para fazer isso<\/li>\n<li>obter os endere\u00e7os de e-mail dos usu\u00e1rios,<\/li>\n<li>e analisando os resultados.<\/li>\n<\/ol>\n<p>H\u00e1 mais a fazer, no entanto. Nomeadamente:<\/p>\n<ol>\n<li>convertendo as informa\u00e7\u00f5es retornadas em JSON,<\/li>\n<li>gravando esse arquivo no disco,<\/li>\n<li>e como unir o resto usando JavaScript.<\/li>\n<\/ol>\n<p>E \u00e9 isso que o restante deste post vai abordar. Portanto, se voc\u00ea n\u00e3o leu <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/obter-enderecos-de-usuarios-no-wordpress-parte-1\/\" title=\"o artigo anterior\">o artigo anterior<\/a>, recomendo-o se n\u00e3o houver outro motivo a n\u00e3o ser dar uma olhada no c\u00f3digo para v\u00ea-lo at\u00e9 agora.<\/p>\n<h2>Endere\u00e7os de e-mail do usu\u00e1rio via JSON, continua\u00e7\u00e3o<\/h2>\n<p>Al\u00e9m do fato de que existem outras maneiras de lidar com esse mesmo processo (algumas mais eficientes dependendo do n\u00famero de usu\u00e1rios), observe que estou usando <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a> (em vez de JavaScript vanilla) para fazer isso. Algumas pessoas n\u00e3o s\u00e3o f\u00e3s de fazer isso, e isso \u00e9 legal, mas n\u00e3o tenho exemplos neste post para isso.<\/p>\n<p>Eu opto por esses exemplos porque o jQuery vem com o WordPress, muitos desenvolvedores do WordPress o usam, ele se encaixa nessa situa\u00e7\u00e3o e eu [ainda] gosto. \ud83d\ude42<\/p>\n<p>Dito isso, continuarei de onde parei.<\/p>\n<h3>1 Converter uma matriz em JSON<\/h3>\n<p>Se voc\u00ea estiver familiarizado com PHP, ent\u00e3o isso \u00e9 algo f\u00e1cil de fazer; mas se n\u00e3o, n\u00e3o \u00e9 grande coisa. Primeiro, revise <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> no manual do PHP. Observe que ele recebe uma matriz e a retornar\u00e1 como uma string formatada.<\/p>\n<p>Isso \u00e9 o que eu uso para converter a matriz de endere\u00e7os de e-mail em uma string de JSON que eventualmente ser\u00e1 gravada em disco. \u00c9 uma linha de c\u00f3digo.<\/p>\n<pre><code>json_encode($user_results);<\/code><\/pre>\n<p>Lembre-se, no entanto, que existe uma fun\u00e7\u00e3o que ir\u00e1 gerar os resultados do usu\u00e1rio conforme necess\u00e1rio. Especificamente, chamei a fun\u00e7\u00e3o <strong>getUserInfo<\/strong> e a compartilharei momentaneamente.<\/p>\n<p>Porque como vamos enviar um arquivo para o usu\u00e1rio, as informa\u00e7\u00f5es precisam ser gravadas em disco.<\/p>\n<h3>2 Gravar no disco<\/h3>\n<p>Neste ponto, \u00e9 hora de gravar os resultados no disco. Dependendo das permiss\u00f5es do seu servidor, voc\u00ea poder\u00e1 gravar o arquivo no disco diretamente no diret\u00f3rio do plugin; caso contr\u00e1rio, voc\u00ea pode ter que usar o\u00a0 diret\u00f3rio de <strong>uploads<\/strong>.<\/p>\n<p>Supondo que voc\u00ea esteja operando com o primeiro, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-06-write-json-to-disk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">veja como \u00e9 a fun\u00e7\u00e3o completa<\/a> :<\/p>\n<pre><code>&lt;?php\n\nprivate function writeAddressesToDisk($addresses)\n{\n    $path = plugin_dir_path(__FILE__). 'results.json';\n    if (!file_exists($path)) {\n        touch($path);\n    }\n\n    $handle = fopen($path, 'w');\n    fwrite($handle, json_encode($addresses));\n    fclose($handle);\n}\n<\/code><\/pre>\n<p>Primeiro, ele verifica se o <strong>results.json<\/strong> existe. Caso contr\u00e1rio, ele criar\u00e1 um arquivo vazio. Depois disso, ele abre o arquivo para grava\u00e7\u00e3o, descarta o conte\u00fado da matriz no formato JSON no arquivo e fecha o recurso.<\/p>\n<p>Agora, o arquivo est\u00e1 no disco, ent\u00e3o \u00e9 hora de envi\u00e1-lo para o usu\u00e1rio usando JavaScript.<\/p>\n<h3>3 Envie para o usu\u00e1rio<\/h3>\n<p>Primeiro, vamos revisitar a fun\u00e7\u00e3o JavaScript <strong>_getEmailAddresses\u00a0 da postagem anterior.<\/strong> Voc\u00ea pode ver o trabalho feito at\u00e9 agora <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nesta ess\u00eancia<\/a>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165737-61e787fe98980.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-165737-61e787fe98980.png\" alt=\"Obter endere\u00e7os de usu\u00e1rios no WordPress, parte 2\"><\/a><\/p>\n<p>Observe que a primeira coisa a fazer \u00e9 chamar uma fun\u00e7\u00e3o do lado do servidor que optei por chamar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-07-get-email-addresses-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">getEmailAddresses<\/a>. Observe que ele executa a consulta, gera a matriz, grava o arquivo no disco e <strong>eco<em><\/em><\/strong> es <strong>o nome do arquivo para a fun\u00e7\u00e3o JavaScript (porque o WordPress requer um eco em vez de um<\/strong> retorno<em><\/em> para chamadas Ajax):<\/p>\n<pre><code>&lt;?php\n\npublic function getEmailAddresses()\n{\n    $this-&gt;writeAddressesToDisk(\n        $this-&gt;getUserInfo(\n            $this-&gt;getUserResults()) );\n\n    echo plugin_dir_url(__FILE__). 'results.json';\n    die;\n}\n<\/code><\/pre>\n<p>Observe que s\u00e3o tr\u00eas chamadas de fun\u00e7\u00e3o, cada uma das quais recebe os resultados da outra como par\u00e2metro e, em seguida, ecoa o <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/plugin_dir_url\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">plugin_dir_url<\/a><\/strong> com o nome do arquivo que optei por usar (claramente <strong>results.json<\/strong> ).<\/p>\n<h3>4 Enviando o arquivo via JavaScript<\/h3>\n<p>\u00c9 aqui que fica um pouco mais complicado. O c\u00f3digo precisa:<\/p>\n<ol>\n<li>certifique-se de que h\u00e1 uma resposta adequada,<\/li>\n<li>em caso afirmativo, ele criar\u00e1 dinamicamente uma \u00e2ncora oculta<\/li>\n<li>acionar o evento de clique da \u00e2ncora para simular um usu\u00e1rio clicando nela.<\/li>\n<\/ol>\n<p>Faz sentido? Confira os resultados da <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-08-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fun\u00e7\u00e3o an\u00f4nima<\/a> abaixo:<\/p>\n<pre><code>var _getEmailAddresses = function($elem) {\n    $.get(acme_email_export.ajax_url, {\n        security:  acme_email_export.security,\n        action:    'getEmailAddresses'\n    }, function(response) {\n\n        if ('' === response) {\n            return;\n        }\n\n        \/\/ Creates the element to download the file.\n        $('&lt;a&gt;&lt;\/a&gt;')\n            .attr('href', response)\n            .attr('download', 'response.json')\n            .attr('id', 'acme-download-emails')\n            .text('Download')\n            .attr('style', 'display:none')\n            .appendTo($elem.parent());\n\n        \/\/ Manually trigger clicking of the hidden element to download the file.\n        $('#acme-download-emails')[0].click();\n    });\n};<\/code><\/pre>\n<p>Isso exibir\u00e1 a\u00a0 caixa de di\u00e1logo do <strong>arquivo de download<\/strong> para o usu\u00e1rio e permitir\u00e1 que ele exiba o arquivo JSON criado por meio desta e da postagem anterior.<\/p>\n<h2>\u00c9 isso?<\/h2>\n<p>Essencialmente, sim. Concedido, voc\u00ea pode ter que fazer ajustes em seu c\u00f3digo para seu servidor web, mas a ideia geral permanece a mesma:<\/p>\n<ol>\n<li>execute a consulta,<\/li>\n<li>gerar uma matriz,<\/li>\n<li>converta para JSON,<\/li>\n<li>grav\u00e1-lo em disco,<\/li>\n<li>enviar o arquivo para o usu\u00e1rio<\/li>\n<\/ol>\n<p>E sim, voc\u00ea pode optar por usar o WordPress Coding Standards (versus PSR2), vanilla JavaScript (versus jQuery) e assim por diante.<\/p>\n<p>Independentemente disso, o procedimento permanece o mesmo e essa \u00e9 uma maneira de fornecer uma maneira de baixar endere\u00e7os de e-mail de usu\u00e1rios via JSON no WordPress.<\/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>Esta \u00e9 a segunda de duas partes de como baixar endere\u00e7os de e-mail de usu\u00e1rios via JSON dentro do WordPress, um menu de administra\u00e7\u00e3o ou um submenu?<\/p>\n","protected":false},"author":1,"featured_media":165738,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,846],"tags":[1170],"class_list":["post-229927","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229927","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=229927"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229927\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165738"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}