✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Получение адресов пользователей в WordPress, часть 2

21

В предыдущем посте я начал делиться тем, как загружать адреса электронной почты пользователей через JSON в WordPress (используя Ajax). В первой статье были рассмотрены:

  1. регистрация JavaScript для этого
  2. получение адресов электронной почты пользователей,
  3. и разбор результатов.

Однако есть еще кое-что, что можно сделать. А именно:

  1. преобразование возвращаемой информации в JSON,
  2. запись этого файла на диск,
  3. и как связать все остальное вместе с помощью 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  из предыдущего поста. Вы можете увидеть работу, проделанную до сих пор в этой сути.

Получение адресов пользователей в WordPress, часть 2

Обратите внимание, что первое, что нужно сделать, это вызвать функцию на стороне сервера, которую я решил вызвать 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

Здесь все становится немного сложнее. Код должен:

  1. убедитесь, что есть правильный ответ,
  2. если это так, то он будет динамически создавать скрытый якорь
  3. инициировать событие щелчка якоря, чтобы имитировать нажатие пользователем на него.

Есть смысл? Проверьте результаты анонимной функции ниже:

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, созданный с помощью этого и предыдущего сообщения.

Это оно?

По сути, да. Конечно, вам, возможно, придется внести изменения в код вашего веб-сервера, но общая идея остается прежней:

  1. выполнить запрос,
  2. создать массив,
  3. преобразовать его в JSON,
  4. записать на диск,
  5. отправить файл пользователю

И да, вы можете использовать стандарты кодирования WordPress (вместо PSR2), ванильный JavaScript (вместо jQuery) и так далее.

Несмотря на это, процедура остается прежней, и это один из способов, которым вы можете предоставить способ загрузки адресов электронной почты пользователей через JSON в WordPress.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее