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