Oletame, et töötate projekti kallal, mille käigus soovite anda kasutajale võimaluse alla laadida kõik WordPressi installis olevate kasutajate meiliaadressid. Tõsi, sellel on mõned nõuded:
- Soovite, et seda teeksid ainult administraatorid,
- See peab olema turvaline nonce väärtuste kaudu,
- Vastused peaksid olema JSON-is,
- Ja soovite faili saatmiseks kasutada JavaScripti, kui see on allalaadimiseks valmis.
Kõiki ülaltoodud mõisteid on siin tõenäoliselt varem käsitletud, kuid mis siis, kui soovite need kõik omavahel siduda? See tähendab, mis siis, kui soovite muuta kasutajate e-posti aadresside allalaadimine JSON-i kaudu WordPressis lihtsaks, näiteks haldusmenüüst või alammenüüst?
Selle postituse kirjutamise ajal kohustuslik kaader sellest, kus ma töötan.
Siin on üks viis selle probleemi lahendamiseks. Pange tähele, et see eeldab, et teil on ülaltooduga seotud teadmised, kuid ma teen kõik endast oleneva, et kõiki ülalmainituid käsitleda.
Laadige kasutajate e-posti aadressid alla JSON-i kaudu
Enne alustamist pange tähele, et seadistan selle toimima iga kord, kui kasutaja klõpsab WordPressi menüü Tööriistad alammenüül.
Konksude seadistamine võib erineda. Olen hakanud kasutama teatud tüüpi arhitektuuri, mis on muutumas üha tavalisemaks projektides, mida kasutan nii enda jaoks kui ka Pressware’is, kuid ma kaldun sellest kõrvale (võib-olla annan ülevaate sellesse hiljem).
Igatahes näeb alammenüü lisamise kood välja järgmine .
<?php
public function addSubmenuPage()
{
add_submenu_page(
'tools.php',
'Export Emails',
'Export Emails',
'manage_options',
'acme-export-emails',
'exportEmails'
);
}
See on täpselt see, mida sa ootasid, eks? Kui kasutate objektorienteeritud koodi, peate võib-olla (või ka mitte, olenevalt sellest, kuidas olete oma lahenduse üles ehitanud) kasutama massiivi, et määrata praeguse klassi eksemplar ja selle meetod.
Pange tähele ka seda, et ma ei muretse selle postituse kontekstis rahvusvahelistumise pärast. Asi pole selles, et seda ei saa teha; asi pole selles, et see poleks oluline. Iseasi, et postitus oleks võimalikult lahja.
JavaScripti registreerimine
Eeldan, et teie profiilis asub fail exportEmail.js ja see on fail, mis vastutab serveripoolse päringu esitamise ja faili allalaadimiseks tagastamise eest.
Esimene asi, mida teha, on JavaScripti turvaline registreerimine serveri poolel standardsete API funktsioonide abil :
<?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')) );
}
Kui see on tehtud, saate kirjutada JavaScripti, mis helistab serveri poolele. Kuid see on kaheosaline samm: see sisaldab nii JavaScripti kui ka rohkem serveripoolset koodi.
Kliendipool helistab serveri poolele
Kuna serveripoolse helistamise põhitõed on paigas, on JavaScripti kohe võimalik seadistada.
Esiteks on seal klikkide töötleja :
$('a[href="tools.php?page=acme-export-emails"]').on('click', function(evt){
evt.preventDefault();
_getEmailAddresses($(this));
});
Esialgne kõne peaks välja nägema umbes selline :
var _getEmailAddresses = function($elem) {
$.get(acme_email_export.ajax_url, {
security: acme_email_export.security,
action: 'getEmailAddresses'
}, function(response) {
if ('' === response) {
return;
}
// TODO...
});
};
Pange tähele, et see kasutab meie varem loodud turvaväärtust ja seejärel teise funktsiooni nime getEmailAddresses, mida see serveri poolel kutsub.
See funktsioon vastutab päringu käitamise, e-posti aadresside haaramise ja kasutajale naasmiseks ajutise JSON-faili kirjutamise eest.
1 Hankige kasutajate e-posti aadressid
Esiteks võimaldab WP_User_Query teatud kriteeriumide alusel kõik kasutajad tagasi tõmmata .
<?php
private function getUserResults()
{
$query = new WP_User_Query(
array(
'role_in' => array('administrator','subscriber')) );
return $query->get_results();
}
Selle näite puhul käsitlen ma ilmselgelt argumente.
2 Sõeluge e-kiri tulemustest välja
Järgmisena kordan tulemusi ja salvestan e-posti aadressid massiivi (mille teisendan lõpuks JSON-iks).
<?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;
}
Pange tähele, et selleks on ka teisi viise. See on vaid üks viis väiksema andmehulga jaoks, kuid kui töötate millegi suurema nimel, siis soovitan alternatiivi (mis ei kuulu selle postituse ulatusse).
Järgmisena
Ilmselgelt on see vaid esimene osa sellest, kuidas seda kõike ühendada.
Järgmises postituses käsitlen järgmist:
- tagastatud teabe teisendamine JSON-iks,
- selle faili kettale kirjutamine,
- ja kuidas ülejäänud osa JavaScripti abil kokku siduda.
Viimane samm hõlmab elemendi loomist ja seejärel selle klõpsamissündmuse käivitamist, nii et kasutajale kuvatakse allalaadimisdialoog, mitte brauseriaknas tegelik tekst.