Ottieni indirizzi utente in WordPress, parte 2
Nel post precedente, ho iniziato a condividere come scaricare gli indirizzi e-mail degli utenti tramite JSON in WordPress (usando Ajax). Il primo articolo riguardava:
- registrazione del JavaScript per farlo
- ottenere gli indirizzi email degli utenti,
- e analizzare i risultati.
C’è altro da fare, però. Vale a dire:
- convertire le informazioni restituite in JSON,
- scrivendo quel file su disco,
- e come legare il resto insieme usando JavaScript.
Ed è ciò che tratterà il resto di questo post. Quindi, se non hai letto l’articolo precedente, te lo consiglio se non altro per dare un’occhiata al codice per vederlo fin qui.
Indirizzi e-mail utente tramite JSON, continua
A parte il fatto che ci sono altri modi per gestire questo stesso processo (alcuni più performanti a seconda del numero di utenti), tieni presente che sto usando jQuery (piuttosto che JavaScript vanigliato) per farlo. Alcune persone non sono fan di farlo, ed è fantastico, ma non ho esempi in questo post per quello.
Opto per questi esempi perché jQuery viene fornito con WordPress, molti sviluppatori di WordPress lo usano, si adatta al conto per questa situazione e [ancora] mi piace. 🙂
Detto questo, riprenderò da dove avevo interrotto.
1 Converti un array in JSON
Se hai familiarità con PHP, questo è qualcosa che è facile da fare; ma se no, non è un grosso problema. Per prima cosa, rivedi json_encode nel manuale PHP. Nota che prende un array e lo restituirà come una stringa formattata.
Questo è ciò che uso per convertire l’array di indirizzi e-mail in una stringa di JSON che verrà eventualmente scritta su disco. È una riga di codice.
json_encode($user_results);
Ricorda, tuttavia, che esiste una funzione che genererà i risultati dell’utente secondo necessità. In particolare, ho chiamato la funzione getUserInfo e la condividerò momentaneamente.
Perché poiché invieremo un file all’utente, le informazioni devono essere scritte su disco.
2 Scrivilo su disco
A questo punto, è il momento di scrivere i risultati su disco. A seconda dei permessi del tuo server, potresti essere in grado di scrivere il file su disco direttamente nella directory del plugin; in caso contrario, potrebbe essere necessario utilizzare la directory dei caricamenti.
Supponendo che tu stia operando con il primo, ecco come appare la funzione 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);
}
Innanzitutto, controlla se esiste results.json . In caso contrario, creerà un file vuoto. Successivamente, apre il file per la scrittura, rilascia il contenuto dell’array nel formato JSON nel file, quindi chiude la risorsa.
Ora il file è su disco, quindi è il momento di inviarlo all’utente utilizzando JavaScript.
3 Inviarlo all’utente
Per prima cosa, rivisiteremo la funzione JavaScript _getEmailAddresses del post precedente. Puoi vedere il lavoro svolto finora in questo succo.
Nota che la prima cosa da fare è chiamare una funzione lato server che ho scelto di chiamare getEmailAddresses. Nota che esegue la query, genera l’array, scrive il file su disco e fa eco del nome del file alla funzione JavaScript (perché WordPress richiede un’eco anziché un ritorno per le chiamate Ajax):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Si noti che si tratta di tre chiamate di funzione ciascuna delle quali prende i risultati dell’altra come parametro e quindi fa eco a plugin_dir_url con il nome del file che ho scelto di utilizzare (chiaramente results.json ).
4 Invio del file tramite JavaScript
Qui è dove diventa un po’ più complicato. Il codice deve:
- assicurati che ci sia una risposta adeguata,
- in tal caso, creerà dinamicamente un’ancora nascosta
- attiva l’evento click dell’ancora per simulare un utente che fa clic su di esso.
Ha senso? Dai un’occhiata ai risultati della funzione anonima qui sotto:
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();
});
};
Questo mostrerà all’utente la finestra di dialogo del file di download e consentirà loro di visualizzare il file JSON creato tramite questo e il post precedente.
Questo è tutto?
In sostanza, sì. Certo, potresti dover apportare modifiche al tuo codice per il tuo server web, ma l’idea generale rimane la stessa:
- eseguire la query,
- generare un array,
- convertilo in JSON,
- scrivilo su disco,
- inviare il file all’utente
E sì, puoi scegliere di utilizzare gli standard di codifica di WordPress (rispetto a PSR2), JavaScript vanilla (rispetto a jQuery) e così via.
Indipendentemente da ciò, la procedura rimane la stessa e questo è un modo per fornire un modo per scaricare gli indirizzi e-mail degli utenti tramite JSON in WordPress.
