✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Uzyskaj adresy użytkowników w WordPress, część 1

13

Załóżmy, że pracujesz nad projektem, w którym chcesz umożliwić użytkownikowi pobieranie wszystkich adresów e-mail od użytkowników istniejących w instalacji WordPress. To prawda, ma to kilka wymagań:

  • Chcesz, żeby zrobili to tylko administratorzy,
  • Musi być bezpieczny poprzez wartości nonce,
  • Odpowiedzi powinny być w formacie JSON,
  • I chcesz użyć JavaScript, aby wysłać plik, gdy będzie gotowy do pobrania.

Każda z powyższych koncepcji została prawdopodobnie omówiona tutaj wcześniej, ale co, jeśli chcesz je wszystkie połączyć? To znaczy, co zrobić, jeśli chcesz ułatwić pobieranie adresów e-mail użytkowników przez JSON w WordPressie, powiedzmy, z menu administracyjnego lub podmenu?

Obowiązkowe ujęcie miejsca, w którym pracuję podczas pisania tego posta.

Oto jeden ze sposobów rozwiązania tego problemu. Zauważ, że zakłada, że ​​masz pewną wiedzę na temat powyższego, ale zrobię, co w mojej mocy, aby omówić każdy z powyższych.

Pobierz adresy e-mail użytkowników przez JSON

Zanim zaczniesz, pamiętaj, że konfiguruję to tak, aby działało za każdym razem, gdy użytkownik kliknie podmenu w  menu Narzędzia w WordPress.

Sposób konfiguracji haczyków może się różnić. Zacząłem używać nieco szczególnego rodzaju architektury, która staje się coraz bardziej standardowa w projektach, których używam zarówno dla siebie, jak i w Pressware, ale w tym celu dygresję (być może przedstawię trochę wglądu do tego później).

Dodawanie podmenu

W każdym razie, oto jak wygląda kod dodawania podmenu.

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

To jest dokładnie to, czego można się spodziewać, prawda? Jeśli używasz kodu zorientowanego obiektowo, możesz (lub nie, ponownie, w zależności od sposobu zaprojektowania rozwiązania) użyć tablicy do określenia wystąpienia bieżącej klasy i jej metody.

Zauważ też, że nie będę się martwił o internacjonalizację w kontekście tego postu. Nie chodzi o to, że nie da się tego zrobić; nie chodzi o to, że to nie jest ważne. To kwestia starania się, aby post był jak najcieńszy.

Rejestracja JavaScript

Zakładam, że w swoim profilu znajduje się plik exportEmail.js, który będzie odpowiedzialny za wysyłanie zapytań po stronie serwera i zwracanie pliku do pobrania.

Pierwszą rzeczą, którą należy zrobić, to bezpiecznie zarejestrować JavaScript po stronie serwera za pomocą standardowych funkcji 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')) );
}

Gdy to zrobisz, możesz napisać JavaScript, który wywoła stronę serwera. Ale jest to krok dwuczęściowy: zawiera zarówno JavaScript, jak i więcej kodu po stronie serwera.

Połączenie po stronie klienta po stronie serwera

Ponieważ podstawy są już gotowe do wywoływania po stronie serwera, można teraz skonfigurować JavaScript.

Po pierwsze, jest moduł obsługi kliknięć :

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

Pierwsze  wywołanie get powinno wyglądać mniej więcej tak :

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

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

Zauważ, że używa wartości bezpieczeństwa, którą stworzyliśmy wcześniej, a następnie używa nazwy innej funkcji, a mianowicie getEmailAddresses, którą wywołuje po stronie serwera.

Ta funkcja jest odpowiedzialna za uruchomienie zapytania, pobranie adresów e-mail i zapisanie tymczasowego pliku JSON, aby powrócić do użytkownika.

1 Uzyskaj adresy e-mail użytkowników

Po pierwsze, WP_User_Query umożliwi wycofanie wszystkich użytkowników dla określonych kryteriów.

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

Na potrzeby tego przykładu, oczywiście, lekceważę argumenty.

2 Przeanalizuj wiadomość e-mail z wyników

Następnie przejdę przez wyniki i przechowam adresy e-mail w tablicy (którą ostatecznie przekonwertuję na 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;
}

Zauważ, że są na to inne sposoby. To tylko jeden sposób na zrobienie tego dla mniejszego zestawu danych, ale jeśli pracujesz nad czymś nieco większym, polecam alternatywę (która wykracza poza zakres tego postu).

W przyszłym

Oczywiście to tylko pierwsza część tego, jak to wszystko połączyć.

W następnym poście omówię:

  • konwersja zwróconych informacji do formatu JSON,
  • zapisanie tego pliku na dysku,
  • i jak powiązać resztę za pomocą JavaScript.

Ostatnim krokiem będzie utworzenie elementu, a następnie wywołanie zdarzenia kliknięcia, dzięki czemu użytkownikowi zostanie wyświetlone okno dialogowe pobierania, a nie rzeczywisty tekst w oknie przeglądarki.

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów