Отримання адрес користувачів у WordPress, частина 2
У попередній публікації я почав ділитися тим, як завантажити адреси електронної пошти користувачів через JSON у WordPress (за допомогою Ajax). Перша стаття охоплювала:
- реєстрація JavaScript для цього
- отримання електронних адрес користувачів,
- і розбір результатів.
Але є ще чим зайнятися. а саме:
- перетворення отриманої інформації в JSON,
- запис цього файлу на диск,
- і як зв’язати решту за допомогою JavaScript.
І саме про це йтиметься в цій публікації. Отже, якщо ви не читали попередню статтю, я рекомендую її, якщо не з іншої причини, аніж поглянути на код, щоб побачити його досі.
Адреси електронної пошти користувачів через JSON, продовження
Окрім того факту, що існують інші способи обробки цього самого процесу (деякі більш продуктивні залежно від кількості користувачів), зауважте, що я використовую для цього jQuery (а не ванільний JavaScript). Деякі люди не люблять це робити, і це круто, але в цій публікації у мене немає прикладів для цього.
Я вибираю ці приклади, тому що jQuery поставляється з WordPress, багато розробників WordPress використовують його, він підходить для цієї ситуації, і мені [досі] подобається. 🙂
З огляду на це, я продовжу з того місця, де зупинився.
1 Перетворіть масив на JSON
Якщо ви знайомі з PHP, це те, що легко зробити; але якщо ні, нічого страшного. Спочатку перегляньте json_encode у посібнику PHP. Зверніть увагу, що він приймає масив і повертає його як відформатований рядок.
Це те, що я використовую для перетворення масиву адрес електронної пошти в рядок JSON, який згодом буде записано на диск. Це один рядок коду.
json_encode($user_results);
Однак пам’ятайте, що існує функція, яка за потреби генеруватиме результати користувача. Зокрема, я викликав функцію getUserInfo, і зараз поділюся нею.
Оскільки ми надсилатимемо файл користувачеві, інформацію потрібно записати на диск.
2 Запишіть його на диск
На цьому етапі настав час записати результати на диск. Залежно від дозволів вашого сервера, ви можете записати файл на диск безпосередньо в каталозі плагіна; інакше вам, можливо, доведеться використовувати каталог завантажень .
Якщо припустити, що ви працюєте з першим, ось як виглядає повна функція:
<?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);
}
Спочатку він перевіряє, чи існує файл results.json. Якщо ні, буде створено порожній файл. Після цього він відкриває файл для запису, завантажує вміст масиву у форматі JSON у файл, а потім закриває ресурс.
Тепер файл на диску, тож настав час надіслати його користувачеві за допомогою JavaScript.
3 Надішліть його користувачеві
Спочатку ми повернемося до функції JavaScript _getEmailAddresses із попередньої публікації. Ви можете побачити роботу, виконану до цього часу, у цій суті.
Зауважте, що перше, що потрібно зробити, це викликати функцію на стороні сервера, яку я вирішив викликати getEmailAddresses. Зауважте, що він виконує запит, генерує масив, записує файл на диск і відтворює назву файлу у функції JavaScript (оскільки WordPress вимагає відлуння, а не повернення для викликів Ajax):
<?php
public function getEmailAddresses()
{
$this->writeAddressesToDisk(
$this->getUserInfo(
$this->getUserResults()) );
echo plugin_dir_url(__FILE__). 'results.json';
die;
}
Зауважте, що це три виклики функції, кожна з яких приймає результати іншої як параметр, а потім повторює plugin_dir_url з назвою файлу, який я вирішив використовувати (очевидно, results.json ).
4 Надсилання файлу через JavaScript
Тут справа стає дещо складнішою. Код повинен:
- переконайтеся, що є належна відповідь,
- якщо так, тоді він динамічно створить прихований якір
- ініціювати подію натискання прив’язки, щоб імітувати натискання користувачем на ній.
Мати сенс? Перегляньте результати анонімної функції нижче:
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();
});
};
Це відобразить для користувача діалогове вікно завантаження файлу та дозволить йому відобразити файл JSON, створений у цьому та попередньому дописах.
Це воно?
По суті, так. Зрозуміло, вам, можливо, доведеться змінити код веб-сервера, але загальна ідея залишається незмінною:
- запустіть запит,
- створити масив,
- перетворити його на JSON,
- записати на диск,
- відправити файл користувачеві
І так, ви можете використовувати стандарти кодування WordPress (проти PSR2), ванільний JavaScript (проти jQuery) тощо.
Незважаючи на це, процедура залишається незмінною, і це один із способів завантаження електронних адрес користувачів через JSON у WordPress.
