Få användaradresser i WordPress, del 2
I det tidigare inlägget började jag dela hur man laddar ner användarnas e-postadresser via JSON i WordPress (med Ajax). Den första artikeln täckte:
- registrera JavaScript för att göra det
- få användarnas e-postadresser,
- och analysera resultaten.
Det finns dock mer att göra. Nämligen:
- konvertera den returnerade informationen till JSON,
- skriva den filen till disk,
- och hur man knyter ihop resten av det med JavaScript.
Och det är vad resten av det här inlägget kommer att täcka. Så om du inte har läst den föregående artikeln rekommenderar jag det om inte av någon annan anledning än att titta på koden för att se den hittills.
Användares e-postadresser via JSON, fortsättning
Bortsett från det faktum att det finns andra sätt att hantera samma process (några mer presterande beroende på antalet användare), notera att jag använder jQuery (snarare än vanilla JavaScript) för att göra detta. Vissa människor är inte fans av att göra det här, och det är coolt, men jag har inga exempel på det i det här inlägget.
Jag väljer dessa exempel eftersom jQuery levereras med WordPress, många WordPress-utvecklare använder det, det passar för den här situationen och jag [fortfarande] gillar det. 🙂
Med det sagt, jag fortsätter där jag slutade.
1 Konvertera en array till JSON
Om du är bekant med PHP så är detta något som är lätt att göra; men om inte är det ingen stor sak. Gå först igenom json_encode i PHP-manualen. Observera att den tar en array och returnerar den som en formaterad sträng.
Det här är vad jag använder för att konvertera mängden e-postadresser till en sträng av JSON som så småningom kommer att skrivas till disken. Det är en rad kod.
json_encode($user_results);
Kom dock ihåg att det finns en funktion som genererar användarresultaten efter behov. Specifikt kallade jag funktionen getUserInfo, och jag kommer att dela den ett ögonblick.
Eftersom vi ska skicka en fil till användaren måste informationen skrivas till disken.
2 Skriv det till disk
Vid det här laget är det dags att skriva resultaten till disken. Beroende på behörigheterna för din server kan du kanske skriva filen till disken direkt i pluginens katalog; annars kan du behöva använda uppladdningskatalogen.
Om du antar att du använder den förra, så här ser hela funktionen ut:
<?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);
}
Först kontrollerar den om results.json finns. Om inte, kommer det att skapa en tom fil. Efter det öppnar den filen för skrivning, släpper innehållet i arrayen i JSON-formatet i filen och stänger sedan resursen.
Nu finns filen på disk, så det är dags att skicka den till användaren med JavaScript.
3 Skicka den till användaren
Först kommer vi att återbesöka JavaScript-funktionen _getEmailAddresses från föregående inlägg. Du kan se det arbete som gjorts hittills i den här sammanfattningen.
Observera att det första du ska göra är att anropa en funktion på serversidan som jag har valt att anropa getEmailAddresses. Observera att den kör frågan, genererar arrayen, skriver filen till disken och eko es filnamnet till JavaScript-funktionen (eftersom WordPress kräver ett eko snarare än en retur för Ajax-anrop):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Lägg märke till att detta är tre funktionsanrop som var och en tar resultatet av den andra som en parameter och sedan ekar plugin_dir_url med namnet på filen jag har valt att använda (klart results.json ).
4 Skicka filen via JavaScript
Det är här det blir lite mer komplicerat. Koden behöver:
- se till att det finns ett korrekt svar,
- om så är fallet kommer det dynamiskt att skapa ett dolt ankare
- utlösa ankarets klickhändelse för att simulera en användare som klickar på den.
Vettigt? Kolla in resultatet av den anonyma funktionen nedan:
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();
});
};
Detta kommer att visa dialogrutan för nedladdningsfilen för användaren och tillåta dem att visa JSON-filen som skapats genom detta och föregående inlägg.
Det är allt?
I huvudsak, ja. Visst, du kan behöva göra justeringar av din kod för din webbserver, men den allmänna idén förblir densamma:
- kör frågan,
- generera en array,
- konvertera det till JSON,
- skriv det till disk,
- skicka filen till användaren
Och ja, du kan välja att använda WordPress-kodningsstandarderna (mot PSR2), vanilla JavaScript (mot jQuery) och så vidare.
Oavsett vilket förblir proceduren densamma och detta är ett sätt som du kan tillhandahålla ett sätt att ladda ner användarnas e-postadresser via JSON i WordPress.
