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

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

38

Допустим, вы работаете над проектом, в котором хотите предоставить пользователю возможность загружать все адреса электронной почты от пользователей, существующих в установке WordPress. Конечно, это имеет несколько требований:

  • Вы хотите, чтобы это делали только администраторы,
  • Он должен быть защищен с помощью значений nonce,
  • Ответы должны быть в формате JSON,
  • И вы хотите использовать JavaScript для отправки файла, когда он будет готов к загрузке.

Каждая из вышеперечисленных концепций, вероятно, уже рассматривалась здесь ранее, но что, если вы хотите связать их все вместе? То есть, что, если вы хотите упростить загрузку адресов электронной почты пользователей через JSON в WordPress, скажем, из меню администрирования или подменю?

Обязательное фото того, где я работаю, пока пишу этот пост.

Вот один из способов решения этой проблемы. Обратите внимание, что предполагается, что у вас есть некоторые знания о вышеизложенном, но я сделаю все возможное, чтобы охватить каждый из вышеперечисленных вопросов.

Загрузка адресов электронной почты пользователей через JSON

Прежде чем начать, обратите внимание, что я настраиваю это так, чтобы оно работало всякий раз, когда пользователь щелкает подменю в меню «Инструменты» в WordPress.

То, как вы настраиваете свои крючки, может различаться. Я начал использовать определенный тип архитектуры, который становится все более и более стандартным в проектах, которые я использую как для себя, так и для Pressware, но для этого я отвлекся на это (возможно, я дам некоторое представление об этом позже).

Добавление подменю

В любом случае, вот как выглядит код добавления подменю.

<?php
public function addSubmenuPage()
{
    add_submenu_page(
        'tools.php',
        'Export Emails',
        'Export Emails',
        'manage_options',
        'acme-export-emails',
        'exportEmails'
    );
}

Это именно то, что вы ожидаете, верно? Если вы используете объектно-ориентированный код, вам может понадобиться (а может, и нет, опять же, в зависимости от того, как вы спроектировали свое решение) использовать массив для указания экземпляра текущего класса и его метода.

Обратите также внимание, что я не собираюсь беспокоиться об интернационализации в контексте этого поста. Дело не в том, что это невозможно сделать; дело не в том, что это не важно. Это вопрос попытки сделать пост как можно более компактным.

Регистрация JavaScript

Я собираюсь предположить, что у вас есть  файл exportEmail.js, расположенный в вашем профиле, и это файл, который будет отвечать за запросы на стороне сервера и возврат файла для загрузки.

Первое, что нужно сделать, это безопасно зарегистрировать JavaScript на стороне сервера, используя стандартные функции API :

<?php

public function addJavaScript()
{
    if (!current_user_can('manage_options')) {
        return;
    }

    wp_enqueue_script(
        'acme-email-export-admin',
        $this->plugin_url. 'Emails/assets/scripts/exportEmail.js',
        array('jquery')
    );

    wp_localize_script(
        'acme-email-export-admin',
        'acme_email_export',
        array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'security' => wp_create_nonce('acme-email-export-nonce')) );
}

Как только это будет сделано, вы можете написать JavaScript, который будет вызывать серверную часть. Но это шаг из двух частей: он включает в себя как JavaScript, так и серверный код.

Сторона клиента, вызывающая сторону сервера

Поскольку основы для вызова на стороне сервера готовы, теперь можно настроить JavaScript.

Во-первых, есть обработчик кликов :

$('a[href="tools.php?page=acme-export-emails"]').on('click', function(evt){
    evt.preventDefault();
    _getEmailAddresses($(this));
});

Первоначальный  вызов get должен выглядеть примерно так :

var _getEmailAddresses = function($elem) {
    $.get(acme_email_export.ajax_url, {
        security:  acme_email_export.security,
        action:    'getEmailAddresses'
    }, function(response) {

        if ('' === response) {
            return;
        }
        // TODO...
    });
};

Обратите внимание, что он использует значение безопасности, которое мы создали ранее, а затем использует имя другой функции, а именно getEmailAddresses, которую он вызывает на стороне сервера.

Эта функция отвечает за выполнение запроса, получение адресов электронной почты и запись временного файла JSON для возврата пользователю.

1 Получите адреса электронной почты пользователей

Во- первых, WP_User_Query позволит вернуть всех пользователей по определенным критериям.

<?php
private function getUserResults()
{
    $query   = new WP_User_Query(
        array(
            'role_in' => array('administrator','subscriber')) );
    return $query->get_results();
}

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

2 Разберите электронное письмо из результатов

Затем я собираюсь просмотреть результаты и сохранить адреса электронной почты в массиве (который я в конечном итоге преобразую в JSON).

<?php

private function getUserInfo($results)
{
    $user_info = array();
    foreach ($results as $result) {
        if (isset($result->user_email)) {
            array_push($user_info, $result->user_email);
        }
    }

    return $user_info;
}

Обратите внимание, что есть и другие способы сделать это. Это всего лишь один из способов сделать это для меньшего набора данных, но если вы работаете над чем-то большим, я рекомендую альтернативу (которая выходит за рамки этого поста).

Следующий

Очевидно, это только первая часть того, как все это подключить.

В следующем посте расскажу:

  • преобразование возвращаемой информации в JSON,
  • запись этого файла на диск,
  • и как связать все остальное вместе с помощью JavaScript.

Последний шаг будет включать в себя создание элемента, а затем инициирование его события щелчка, чтобы пользователю было представлено диалоговое окно загрузки, а не фактический текст в окне браузера.

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

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