✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Отримання адрес користувачів у WordPress, частина 1

13

Скажімо, ви працюєте над проектом, у якому ви хочете надати користувачеві можливість завантажувати всі адреси електронної пошти від користувачів, які існують у встановленому 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі