Obtener direcciones de usuario en WordPress, Parte 2
En la publicación anterior, comencé a compartir cómo descargar las direcciones de correo electrónico de los usuarios a través de JSON en WordPress (usando Ajax). El primer artículo cubría:
- registrando el JavaScript para hacerlo
- obtener las direcciones de correo electrónico de los usuarios,
- y analizando los resultados.
Sin embargo, hay más que hacer. A saber:
- convertir la información devuelta en JSON,
- escribir ese archivo en el disco,
- y cómo unir el resto usando JavaScript.
Y eso es lo que cubrirá el resto de esta publicación. Entonces, si no ha leído el artículo anterior, lo recomiendo por la simple razón de echar un vistazo al código para verlo hasta el momento.
Direcciones de correo electrónico de usuario a través de JSON, continuación
Aparte del hecho de que hay otras formas de manejar este mismo proceso (algunas con más rendimiento dependiendo de la cantidad de usuarios), tenga en cuenta que estoy usando jQuery (en lugar de JavaScript estándar) para hacer esto. Algunas personas no son fanáticas de hacer esto, y eso es genial, pero no tengo ejemplos en esta publicación para eso.
Opto por estos ejemplos porque jQuery viene con WordPress, muchos desarrolladores de WordPress lo usan, se ajusta a la factura de esta situación y [todavía] me gusta. 🙂
Dicho esto, continuaré donde lo dejé.
1 Convertir una matriz en JSON
Si está familiarizado con PHP, esto es algo fácil de hacer; pero si no, no es gran cosa. Primero, revise json_encode en el manual de PHP. Tenga en cuenta que toma una matriz y la devolverá como una cadena formateada.
Esto es lo que uso para convertir la matriz de direcciones de correo electrónico en una cadena de JSON que eventualmente se escribirá en el disco. Es una línea de código.
json_encode($user_results);
Recuerde, sin embargo, que hay una función que generará los resultados del usuario según sea necesario. Específicamente, llamé a la función getUserInfo y la compartiré en un momento.
Porque como vamos a enviar un archivo al usuario, la información debe escribirse en el disco.
2 Escribirlo en el disco
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 directorio de cargas.
Suponiendo que está operando con el primero, así es como se ve la función completa :
<?php
private function writeAddressesToDisk($addresses)
{
$path = plugin_dir_path(__FILE__). 'results.json';
if (!file_exists($path)) {
touch($path);
}
$handle = fopen($path, 'w');
fwrite($handle, json_encode($addresses));
fclose($handle);
}
Primero, comprueba si existe results.json . De lo contrario, creará un archivo vacío. Después de eso, abre el archivo para escribir, coloca el contenido de la matriz en formato JSON en el archivo y luego cierra el recurso.
Ahora, el archivo está en el disco, por lo que es hora de enviarlo al usuario mediante JavaScript.
3 Enviarlo al usuario
Primero, revisaremos la función de JavaScript _getEmailAddresses de la publicación anterior. Puede ver el trabajo realizado hasta el momento en esta esencia.
Tenga en cuenta que lo primero que debe hacer es llamar a una función del lado del servidor que he optado por llamar a getEmailAddresses. Tenga en cuenta que ejecuta la consulta, genera la matriz, escribe el archivo en el disco y repite el nombre del archivo en la función de JavaScript (porque WordPress requiere un eco en lugar de un retorno para las llamadas Ajax):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Tenga en cuenta que se trata de tres llamadas de función, cada una de las cuales toma los resultados de la otra como un parámetro y luego repite el plugin_dir_url con el nombre del archivo que he optado por usar (claramente, results.json ).
4 Envío del archivo a través de JavaScript
Aquí es donde se pone un poco más complicado. El código necesita:
- asegúrese de que haya una respuesta adecuada,
- si es así, creará dinámicamente un ancla oculta
- activa el evento de clic del ancla para simular que un usuario hace clic en él.
¿Tener sentido? Echa un vistazo a los resultados de la función anónima a continuación:
var _getEmailAddresses = function($elem) {
$.get(acme_email_export.ajax_url, {
security: acme_email_export.security,
action: 'getEmailAddresses'
}, function(response) {
if ('' === response) {
return;
}
// Creates the element to download the file.
$('<a></a>')
.attr('href', response)
.attr('download', 'response.json')
.attr('id', 'acme-download-emails')
.text('Download')
.attr('style', 'display:none')
.appendTo($elem.parent());
// Manually trigger clicking of the hidden element to download the file.
$('#acme-download-emails')[0].click();
});
};
Esto mostrará el cuadro de diálogo de descarga del archivo al usuario y le permitirá mostrar el archivo JSON creado a través de esta y la publicación anterior.
¿Eso es todo?
Esencialmente, sí. De acuerdo, puede que tenga que hacer ajustes a su código para su servidor web, pero la idea general sigue siendo la misma:
- ejecutar la consulta,
- generar una matriz,
- convertirlo a JSON,
- escribirlo en el disco,
- enviar el archivo al usuario
Y sí, puede optar por usar los estándares de codificación de WordPress (en lugar de PSR2), JavaScript estándar (en lugar de jQuery), etc.
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ónico de los usuarios a través de JSON en WordPress.
