✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Få användaradresser i WordPress, del 1

29

Säg att du arbetar med ett projekt där du vill ge användaren möjligheten att ladda ner alla e-postadresser från användarna som finns i WordPress-installationen. Visst, detta har några krav:

  • Du vill bara att administratörer ska göra det,
  • Det måste vara säkert via nonce-värden,
  • Svaren ska vara i JSON,
  • Och du vill använda JavaScript för att skicka filen när den är redo att laddas ner.

Vart och ett av ovanstående begrepp har troligen behandlats här tidigare, men vad händer om du vill knyta ihop dem alla? Det vill säga, vad händer om du vill göra det enkelt att ladda ner användarnas e-postadresser via JSON inom WordPress från till exempel en administrationsmeny eller en undermeny?

En obligatorisk bild av var jag jobbar när jag skriver det här inlägget.

Här är ett sätt att lösa det problemet. Observera att det förutsätter att du har viss kunskap om ovanstående, men jag ska göra vad jag kan för att täcka vart och ett av ovanstående.

Ladda ner användarens e-postadresser via JSON

Innan du börjar, notera att jag ställer in detta för att fungera när en användare klickar på en undermeny under Verktyg- menyn i WordPress.

Hur du sätter upp dina krokar kan variera. Jag har börjat använda lite av en speciell typ av arkitektur som blir mer och mer standard i de projekt jag använder både för mig själv och som vi använder på Pressware, men jag avviker från det för detta (kanske jag ska ge lite insikter) in på detta senare).

Lägga till en undermeny

Hur som helst, så här ser koden ut för att lägga till undermenyn.

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

Det är precis vad du förväntar dig, eller hur? Om du använder objektorienterad kod kan du (eller kanske inte, igen, beroende på hur du har utformat din lösning) behöva använda en array för att specificera en instans av den aktuella klassen och dess metod.

Observera också att jag inte kommer att oroa mig för internationalisering i samband med detta inlägg. Det är inte så att det inte kan göras; det är inte så att det inte är viktigt. Det gäller att försöka hålla inlägget så magert som möjligt.

Registrerar JavaScript

Jag kommer att anta att du har en exportEmail.js -fil i din profil och det här är filen som kommer att ansvara för att fråga serversidan och returnera filen för nedladdning.

Det första du ska göra är att säkert registrera JavaScript på serversidan med hjälp av standard API-funktioner :

<?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')) );
}

När detta är gjort kan du skriva JavaScript som kommer att anropa serversidan. Men det här är ett tvådelat steg: Det inkluderar både JavaScript och sedan mer kod på serversidan.

Klientsidan anropar serversidan

Eftersom grunderna är på plats för att anropa serversidan är det möjligt att ställa in JavaScript nu.

Först är det klickhanteraren :

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

Det första get -anropet bör se ut ungefär så här :

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

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

Lägg märke till att den använder säkerhetsvärdet vi skapade tidigare och sedan använder den namnet på en annan funktion, nämligen getEmailAddresses, som den anropar på serversidan.

Den här funktionen är ansvarig för att köra en fråga, ta tag i e-postadresserna och skriva en temporär JSON-fil för att återvända till användaren.

1 Hämta användarnas e-postadresser

För det första kommer WP_User_Query att göra det möjligt att dra tillbaka alla användare för vissa kriterier.

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

För detta exempel tänker jag uppenbarligen lätt på argumenten.

2 Analysera e-postmeddelandet ur resultaten

Därefter ska jag iterera igenom resultaten och lagra e-postadresserna i en array (som jag så småningom kommer att konvertera till 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;
}

Observera att det finns andra sätt att göra detta. Det här är bara ett sätt att göra det för en mindre uppsättning data, men om du arbetar för något lite större rekommenderar jag ett alternativ (som ligger utanför ramen för detta inlägg).

Strax

Uppenbarligen är detta bara den första delen av hur man kopplar ihop allt detta.

I nästa inlägg kommer jag att ta upp:

  • konvertera den returnerade informationen till JSON,
  • skriva den filen till disk,
  • och hur man knyter ihop resten av det med JavaScript.

Det sista steget kommer att inkludera att skapa ett element och sedan utlösa dess klickhändelse så att användaren presenteras med nedladdningsdialogrutan snarare än den faktiska texten i ett webbläsarfönster.

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer