W poprzednim poście zacząłem udostępniać, jak pobierać adresy e-mail użytkowników przez JSON w WordPressie (za pomocą Ajax). Pierwszy artykuł obejmował:
- rejestracja JavaScript w tym celu
- pozyskiwanie adresów e-mail użytkowników,
- i analizowanie wyników.
Jest jednak więcej do zrobienia. Mianowicie:
- konwersja zwróconych informacji do formatu JSON,
- zapisanie tego pliku na dysku,
- i jak powiązać resztę za pomocą JavaScript.
I o tym będzie mowa w dalszej części tego postu. Więc jeśli nie czytałeś poprzedniego artykułu, polecam go choćby z powodu spojrzenia na kod, aby zobaczyć go do tej pory.
Adresy e-mail użytkowników za pośrednictwem JSON, ciąg dalszy
Oprócz tego, że istnieją inne sposoby obsługi tego samego procesu (niektóre bardziej wydajne w zależności od liczby użytkowników), zauważ, że do tego używam jQuery (zamiast waniliowego JavaScript). Niektórzy ludzie nie są fanami tego i to jest fajne, ale nie mam na to przykładów w tym poście.
Wybieram te przykłady, ponieważ jQuery jest dostarczane z WordPressem, wielu programistów WordPressa z niego korzysta, pasuje do tej sytuacji i [nadal] mi się podoba.
Powiedziawszy to, wrócę od miejsca, w którym skończyłem.
1 Konwertuj tablicę na JSON
Jeśli znasz PHP, jest to łatwe do zrobienia; ale jeśli nie, to nic wielkiego. Najpierw przejrzyj json_encode w podręczniku PHP. Zauważ, że pobiera tablicę i zwróci ją jako sformatowany ciąg.
To jest to, czego używam do konwersji tablicy adresów e-mail na ciąg JSON, który ostatecznie zostanie zapisany na dysku. To jedna linijka kodu.
json_encode($user_results);
Pamiętaj jednak, że istnieje funkcja, która w razie potrzeby wygeneruje wyniki użytkownika. W szczególności wywołałem funkcję getUserInfo i za chwilę ją udostępnię.
Ponieważ ponieważ zamierzamy wysłać plik do użytkownika, informacje muszą zostać zapisane na dysku.
2 Zapisz to na dysku
W tym momencie nadszedł czas na zapisanie wyników na dysku. W zależności od uprawnień serwera, możesz mieć możliwość zapisania pliku na dysku bezpośrednio w katalogu wtyczki; w przeciwnym razie może być konieczne użycie katalogu uploads.
Zakładając, że pracujesz z pierwszym, oto jak wygląda pełna funkcja :
<?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);
}
Najpierw sprawdza, czy istnieje plik results.json . Jeśli nie, utworzy pusty plik. Następnie otwiera plik do zapisu, wrzuca zawartość tablicy w formacie JSON do pliku, a następnie zamyka zasób.
Teraz plik znajduje się na dysku, więc czas wysłać go użytkownikowi za pomocą JavaScript.
3 Wyślij go do użytkownika
Najpierw przyjrzymy się funkcji JavaScript _getEmailAddresses z poprzedniego postu. Możesz zobaczyć dotychczasową pracę w tym sednie.
Zauważ, że pierwszą rzeczą do zrobienia jest wywołanie funkcji po stronie serwera, którą zdecydowałem się wywołać getEmailAddresses. Zauważ, że uruchamia zapytanie, generuje tablicę, zapisuje plik na dysku i echo podaje nazwę pliku do funkcji JavaScript (ponieważ WordPress wymaga echa zamiast powrotu dla wywołań Ajax):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Zauważ, że są to trzy wywołania funkcji, z których każde przyjmuje wyniki drugiego jako parametr, a następnie wywołuje echo plugin_dir_url z nazwą pliku, którego zdecydowałem się użyć (wyraźnie results.json ).
4 Wysyłanie pliku przez JavaScript
Tutaj sprawa staje się nieco bardziej skomplikowana. Kod musi:
- upewnij się, że jest poprawna odpowiedź,
- jeśli tak, to dynamicznie utworzy ukrytą kotwicę
- wywołać zdarzenie kliknięcia kotwicy, aby zasymulować kliknięcie przez użytkownika.
Ma sens? Sprawdź poniżej wyniki funkcji anonimowej :
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();
});
};
Spowoduje to wyświetlenie użytkownikowi okna dialogowego pobierania pliku i umożliwi wyświetlenie pliku JSON utworzonego w tym i poprzednim poście.
Otóż to?
Zasadniczo tak. To prawda, że może być konieczne wprowadzenie poprawek w kodzie serwera WWW, ale ogólna idea pozostaje taka sama:
- uruchomić zapytanie,
- wygenerować tablicę,
- przekonwertuj go na JSON,
- zapisz to na dysku,
- wyślij plik do użytkownika
I tak, możesz zdecydować się na użycie standardów kodowania WordPress (w porównaniu z PSR2), waniliowego JavaScript (w porównaniu z jQuery) i tak dalej.
Niezależnie od tego procedura pozostaje taka sama i jest to jeden ze sposobów, w jaki możesz zapewnić sposób pobierania adresów e-mail użytkowników za pośrednictwem JSON w WordPress.
