Obtenir les adresses des utilisateurs dans WordPress, partie 2
Dans le post précédent, j’ai commencé à partager comment télécharger les adresses e-mail des utilisateurs via JSON dans WordPress (en utilisant Ajax). Le premier article couvrait :
- enregistrer le JavaScript pour le faire
- obtenir les adresses e-mail des utilisateurs,
- et analyser les résultats.
Il y a plus à faire, cependant. À savoir:
- convertir les informations retournées en JSON,
- écrire ce fichier sur le disque,
- et comment lier le reste en utilisant JavaScript.
Et c’est ce que le reste de ce post va couvrir. Donc, si vous n’avez pas lu l’article précédent, je le recommande si ce n’est pour aucune autre raison que de jeter un coup d’œil au code pour le voir jusqu’ici.
Adresses e-mail des utilisateurs via JSON, suite
Outre le fait qu’il existe d’autres façons de gérer ce même processus (certaines plus performantes en fonction du nombre d’utilisateurs), notez que j’utilise jQuery (plutôt que du JavaScript vanille) pour ce faire. Certaines personnes ne sont pas fans de faire cela, et c’est cool, mais je n’ai pas d’exemples dans ce post pour cela.
J’opte pour ces exemples car jQuery est livré avec WordPress, de nombreux développeurs WordPress l’utilisent, il convient parfaitement à cette situation et je l’aime [toujours]. 🙂
Cela dit, je vais reprendre là où j’ai laissé.
1 Convertir un tableau en JSON
Si vous connaissez PHP, c’est quelque chose de facile à faire. mais si ce n’est pas le cas, ce n’est pas grave. Tout d’abord, passez en revue json_encode dans le manuel PHP. Notez qu’il prend un tableau et le renverra sous la forme d’une chaîne formatée.
C’est ce que j’utilise pour convertir le tableau d’adresses e-mail en une chaîne de JSON qui sera éventuellement écrite sur le disque. C’est une ligne de code.
json_encode($user_results);
Rappelez-vous, cependant, qu’il existe une fonction qui générera les résultats de l’utilisateur selon les besoins. Plus précisément, j’ai appelé la fonction getUserInfo, et je vais la partager momentanément.
Parce que puisque nous allons envoyer un fichier à l’utilisateur, les informations doivent être écrites sur le disque.
2 Écrivez-le sur le disque
À ce stade, il est temps d’écrire les résultats sur le disque. Selon les autorisations de votre serveur, vous pourrez peut-être écrire le fichier sur le disque directement dans le répertoire du plugin ; sinon, vous devrez peut-être utiliser le répertoire des téléchargements.
En supposant que vous travaillez avec le premier, voici à quoi ressemble la fonction complète :
<?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);
}
Tout d’abord, il vérifie si results.json existe. Sinon, il créera un fichier vide. Après cela, il ouvre le fichier en écriture, dépose le contenu du tableau au format JSON dans le fichier, puis ferme la ressource.
Maintenant, le fichier est sur le disque, il est donc temps de l’envoyer à l’utilisateur en utilisant JavaScript.
3 Envoyez-le à l’utilisateur
Tout d’abord, nous allons revoir la fonction JavaScript _getEmailAddresses du post précédent. Vous pouvez voir le travail accompli jusqu’à présent dans cet essentiel.
Notez que la première chose à faire est d’appeler une fonction côté serveur que j’ai choisi d’appeler getEmailAddresses. Notez qu’il exécute la requête, génère le tableau, écrit le fichier sur le disque et renvoie le nom du fichier à la fonction JavaScript (car WordPress nécessite un écho plutôt qu’un retour pour les appels Ajax) :
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Notez qu’il s’agit de trois appels de fonction dont chacun prend les résultats de l’autre comme paramètre, puis renvoie le plugin_dir_url avec le nom du fichier que j’ai choisi d’utiliser (clairement results.json ).
4 Envoi du fichier via JavaScript
C’est là que ça se complique un peu. Le code doit :
- assurez-vous qu’il y a une réponse appropriée,
- si c’est le cas, il créera dynamiquement une ancre cachée
- déclencher l’événement click de l’ancre pour simuler un utilisateur cliquant dessus.
Avoir du sens ? Découvrez les résultats de la fonction anonyme ci-dessous :
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();
});
};
Cela affichera la boîte de dialogue de téléchargement du fichier à l’utilisateur et lui permettra d’afficher le fichier JSON créé via ce message et le précédent.
C’est ça?
Essentiellement, oui. Certes, vous devrez peut-être apporter des modifications à votre code pour votre serveur Web, mais l’idée générale reste la même :
- exécuter la requête,
- générer un tableau,
- convertissez-le en JSON,
- l’écrire sur le disque,
- envoyer le fichier à l’utilisateur
Et oui, vous pouvez choisir d’utiliser les normes de codage WordPress (versus PSR2), JavaScript vanille (versus jQuery), etc.
Quoi qu’il en soit, la procédure reste la même et c’est une façon de fournir un moyen de télécharger les adresses e-mail des utilisateurs via JSON dans WordPress.
