{"id":229519,"date":"2022-11-14T13:47:00","date_gmt":"2022-11-14T10:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229519"},"modified":"2022-11-14T13:48:57","modified_gmt":"2022-11-14T10:48:57","slug":"obtener-direcciones-de-usuario-en-wordpress-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/obtener-direcciones-de-usuario-en-wordpress-parte-2\/","title":{"rendered":"Obtener direcciones de usuario en WordPress, Parte 2"},"content":{"rendered":"\n<p>En <a href=\"https:\/\/wordpress.mediadoma.com\/es\/obtener-direcciones-de-usuario-en-wordpress-parte-1\/\" title=\"la publicaci\u00f3n anterior\">la publicaci\u00f3n anterior<\/a>, comenc\u00e9 a compartir c\u00f3mo descargar las direcciones de correo electr\u00f3nico de los usuarios a trav\u00e9s de JSON en WordPress (usando Ajax). El primer art\u00edculo cubr\u00eda:<\/p>\n<ol>\n<li>registrando el JavaScript para hacerlo<\/li>\n<li>obtener las direcciones de correo electr\u00f3nico de los usuarios,<\/li>\n<li>y analizando los resultados.<\/li>\n<\/ol>\n<p>Sin embargo, hay m\u00e1s que hacer. A saber:<\/p>\n<ol>\n<li>convertir la informaci\u00f3n devuelta en JSON,<\/li>\n<li>escribir ese archivo en el disco,<\/li>\n<li>y c\u00f3mo unir el resto usando JavaScript.<\/li>\n<\/ol>\n<p>Y eso es lo que cubrir\u00e1 el resto de esta publicaci\u00f3n. Entonces, si no ha le\u00eddo <a href=\"https:\/\/wordpress.mediadoma.com\/es\/obtener-direcciones-de-usuario-en-wordpress-parte-1\/\" title=\"el art\u00edculo anterior\">el art\u00edculo anterior<\/a>, lo recomiendo por la simple raz\u00f3n de echar un vistazo al c\u00f3digo para verlo hasta el momento.<\/p>\n<h2>Direcciones de correo electr\u00f3nico de usuario a trav\u00e9s de JSON, continuaci\u00f3n<\/h2>\n<p>Aparte del hecho de que hay otras formas de manejar este mismo proceso (algunas con m\u00e1s rendimiento dependiendo de la cantidad de usuarios), tenga en cuenta que estoy usando <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a> (en lugar de JavaScript est\u00e1ndar) para hacer esto. Algunas personas no son fan\u00e1ticas de hacer esto, y eso es genial, pero no tengo ejemplos en esta publicaci\u00f3n para eso.<\/p>\n<p>Opto por estos ejemplos porque jQuery viene con WordPress, muchos desarrolladores de WordPress lo usan, se ajusta a la factura de esta situaci\u00f3n y [todav\u00eda] me gusta. \ud83d\ude42<\/p>\n<p>Dicho esto, continuar\u00e9 donde lo dej\u00e9.<\/p>\n<h3>1 Convertir una matriz en JSON<\/h3>\n<p>Si est\u00e1 familiarizado con PHP, esto es algo f\u00e1cil de hacer; pero si no, no es gran cosa. Primero, revise <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> en el manual de PHP. Tenga en cuenta que toma una matriz y la devolver\u00e1 como una cadena formateada.<\/p>\n<p>Esto es lo que uso para convertir la matriz de direcciones de correo electr\u00f3nico en una cadena de JSON que eventualmente se escribir\u00e1 en el disco. Es una l\u00ednea de c\u00f3digo.<\/p>\n<pre><code>json_encode($user_results);<\/code><\/pre>\n<p>Recuerde, sin embargo, que hay una funci\u00f3n que generar\u00e1 los resultados del usuario seg\u00fan sea necesario. Espec\u00edficamente, llam\u00e9 a la funci\u00f3n <strong>getUserInfo<\/strong> y la compartir\u00e9 en un momento.<\/p>\n<p>Porque como vamos a enviar un archivo al usuario, la informaci\u00f3n debe escribirse en el disco.<\/p>\n<h3>2 Escribirlo en el disco<\/h3>\n<p>En este punto, es hora de escribir los resultados en el disco. Dependiendo de los permisos de su servidor, puede escribir el archivo en el disco directamente en el directorio del complemento; de lo contrario, es posible que deba usar el\u00a0 directorio de <strong>cargas<\/strong>.<\/p>\n<p>Suponiendo que est\u00e1 operando con el primero, as\u00ed es como se ve <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-06-write-json-to-disk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la funci\u00f3n 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>Primero, comprueba si existe <strong>results.json .<\/strong> De lo contrario, crear\u00e1 un archivo vac\u00edo. Despu\u00e9s de eso, abre el archivo para escribir, coloca el contenido de la matriz en formato JSON en el archivo y luego cierra el recurso.<\/p>\n<p>Ahora, el archivo est\u00e1 en el disco, por lo que es hora de enviarlo al usuario mediante JavaScript.<\/p>\n<h3>3 Enviarlo al usuario<\/h3>\n<p>Primero,\u00a0 revisaremos la funci\u00f3n de JavaScript <strong>_getEmailAddresses\u00a0 de la publicaci\u00f3n anterior.<\/strong> Puede ver el trabajo realizado hasta el momento en <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esta esencia<\/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=\"Obtener direcciones de usuario en WordPress, Parte 2\"><\/a><\/p>\n<p>Tenga en cuenta que lo primero que debe hacer es llamar a una funci\u00f3n del lado del servidor que he optado por llamar a <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>. Tenga en cuenta que ejecuta la consulta, genera la matriz, escribe el archivo en el disco y repite <strong><em><\/em><\/strong> <strong>el nombre del archivo en la funci\u00f3n de JavaScript (porque WordPress requiere un eco en lugar de un<\/strong> retorno<em><\/em> para las llamadas 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>Tenga en cuenta que se trata de tres llamadas de funci\u00f3n, cada una de las cuales toma los resultados de la otra como un par\u00e1metro y luego repite el <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> con el nombre del archivo que he optado por usar (claramente, <strong>results.json<\/strong> ).<\/p>\n<h3>4 Env\u00edo del archivo a trav\u00e9s de JavaScript<\/h3>\n<p>Aqu\u00ed es donde se pone un poco m\u00e1s complicado. El c\u00f3digo necesita:<\/p>\n<ol>\n<li>aseg\u00farese de que haya una respuesta adecuada,<\/li>\n<li>si es as\u00ed, crear\u00e1 din\u00e1micamente un ancla oculta<\/li>\n<li>activa el evento de clic del ancla para simular que un usuario hace clic en \u00e9l.<\/li>\n<\/ol>\n<p>\u00bfTener sentido? Echa un vistazo a los resultados de <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-08-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la funci\u00f3n an\u00f3nima a<\/a> continuaci\u00f3n:<\/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>Esto mostrar\u00e1 el\u00a0 cuadro de di\u00e1logo de <strong>descarga del archivo<\/strong> al usuario y le permitir\u00e1 mostrar el archivo JSON creado a trav\u00e9s de esta y la publicaci\u00f3n anterior.<\/p>\n<h2>\u00bfEso es todo?<\/h2>\n<p>Esencialmente, s\u00ed. De acuerdo, puede que tenga que hacer ajustes a su c\u00f3digo para su servidor web, pero la idea general sigue siendo la misma:<\/p>\n<ol>\n<li>ejecutar la consulta,<\/li>\n<li>generar una matriz,<\/li>\n<li>convertirlo a JSON,<\/li>\n<li>escribirlo en el disco,<\/li>\n<li>enviar el archivo al usuario<\/li>\n<\/ol>\n<p>Y s\u00ed, puede optar por usar los est\u00e1ndares de codificaci\u00f3n de WordPress (en lugar de PSR2), JavaScript est\u00e1ndar (en lugar de jQuery), etc.<\/p>\n<p>Independientemente, el procedimiento sigue siendo el mismo y esta es una forma en que puede proporcionar una forma de descargar las direcciones de correo electr\u00f3nico de los usuarios a trav\u00e9s de JSON en WordPress.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <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 es la segunda de dos partes sobre c\u00f3mo descargar las direcciones de correo electr\u00f3nico de los usuarios a trav\u00e9s de JSON dentro de WordPress desde un men\u00fa de administraci\u00f3n o un submen\u00fa.<\/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":[892,716,840],"tags":[1172],"class_list":["post-229519","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229519","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229519"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229519\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/165738"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229519"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229519"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229519"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}