Получение адресов пользователей в 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.
