{"id":230158,"date":"2022-11-13T18:02:00","date_gmt":"2022-11-13T15:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230158"},"modified":"2022-11-09T20:21:56","modified_gmt":"2022-11-09T17:21:56","slug":"ottieni-indirizzi-utente-in-wordpress-parte-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/ottieni-indirizzi-utente-in-wordpress-parte-1\/","title":{"rendered":"Ottieni indirizzi utente in WordPress, parte 1"},"content":{"rendered":"\n<p>Supponiamo che tu stia lavorando a un progetto in cui desideri fornire all&#8217;utente la possibilit\u00e0 di scaricare tutti gli indirizzi e-mail dagli utenti che esistono nell&#8217;installazione di WordPress. Certo, questo ha alcuni requisiti:<\/p>\n<ul>\n<li>Vuoi che lo facciano solo gli amministratori,<\/li>\n<li>Deve essere sicuro tramite valori nonce,<\/li>\n<li>Le risposte dovrebbero essere in JSON,<\/li>\n<li>E vuoi usare JavaScript per inviare il file quando \u00e8 pronto per il download.<\/li>\n<\/ul>\n<p>Ognuno dei concetti di cui sopra \u00e8 stato probabilmente trattato qui prima, ma cosa succede se stai cercando di legarli tutti insieme? Cio\u00e8, cosa succede se si desidera semplificare il download degli indirizzi e-mail degli utenti tramite JSON all&#8217;interno di WordPress da, ad esempio, un menu di amministrazione o un sottomenu?<\/p>\n<p>Uno scatto obbligatorio di dove sto lavorando mentre scrivo questo post.<\/p>\n<p>Ecco un modo per affrontare questo problema. Nota che presuppone che tu abbia una certa conoscenza di quanto sopra, ma far\u00f2 il possibile per coprire ciascuno dei precedenti.<\/p>\n<h2>Scarica gli indirizzi e-mail degli utenti tramite JSON<\/h2>\n<p>Prima di iniziare, tieni presente che lo sto configurando per funzionare ogni volta che un utente fa clic su un sottomenu nel\u00a0 menu <strong>Strumenti<\/strong> in WordPress.<\/p>\n<p>Il modo in cui imposti i tuoi ganci pu\u00f2 variare. Ho iniziato a usare un po&#8217; di un particolare tipo di architettura che sta diventando sempre pi\u00f9 standard nei progetti che uso sia per me stesso che che usiamo in <a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pressware<\/a>, ma divago su questo per questo (forse fornir\u00f2 alcune informazioni in questo pi\u00f9 avanti).<\/p>\n<h3>Aggiunta di un sottomenu<\/h3>\n<p>Ad ogni modo, ecco come appare il codice per <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-00-add-submenu-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungere il sottomenu<\/a>.<\/p>\n<pre><code>&lt;?php\npublic function addSubmenuPage()\n{\n    add_submenu_page(\n        'tools.php',\n        'Export Emails',\n        'Export Emails',\n        'manage_options',\n        'acme-export-emails',\n        'exportEmails'\n    );\n}\n<\/code><\/pre>\n<p>\u00c8 esattamente quello che ti aspetteresti, giusto? Se stai usando codice orientato agli oggetti, potresti (o meno, di nuovo, a seconda di come hai progettato la tua soluzione) dover usare un array per specificare un&#8217;istanza della classe corrente e il suo metodo.<\/p>\n<p>Nota anche che non mi preoccuper\u00f2 dell&#8217;internazionalizzazione nel contesto di questo post. Non \u00e8 che non si possa fare; non \u00e8 che non sia importante. Si tratta di cercare di mantenere il post il pi\u00f9 snello possibile.<\/p>\n<h3>Registrazione del JavaScript<\/h3>\n<p>Suppongo che tu abbia un\u00a0 file <strong>exportEmail.js<\/strong> situato nel tuo profilo e questo \u00e8 il file che sar\u00e0 responsabile della query sul lato server e della restituzione del file per il download.<\/p>\n<p>La prima cosa da fare \u00e8 registrare in modo sicuro JavaScript sul lato server utilizzando <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-01-register-javascript-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le funzioni API standard<\/a> :<\/p>\n<pre><code>&lt;?php\n\npublic function addJavaScript()\n{\n    if (!current_user_can('manage_options')) {\n        return;\n    }\n\n    wp_enqueue_script(\n        'acme-email-export-admin',\n        $this-&gt;plugin_url. 'Emails\/assets\/scripts\/exportEmail.js',\n        array('jquery')\n    );\n\n    wp_localize_script(\n        'acme-email-export-admin',\n        'acme_email_export',\n        array(\n            'ajax_url' =&gt; admin_url('admin-ajax.php'),\n            'security' =&gt; wp_create_nonce('acme-email-export-nonce')) );\n}\n<\/code><\/pre>\n<p>Una volta fatto, puoi scrivere il JavaScript che chiamer\u00e0 il lato server. Ma questo \u00e8 un passaggio in due parti: include sia JavaScript che altro codice lato server.<\/p>\n<h3>Il lato client che chiama il lato server<\/h3>\n<p>Poich\u00e9 sono disponibili le basi per chiamare il lato server, \u00e8 possibile impostare JavaScript ora.<\/p>\n<p>Innanzitutto, c&#8217;\u00e8 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-02-click-handler-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il gestore dei clic<\/a> :<\/p>\n<pre><code>$('a[href=\"tools.php?page=acme-export-emails\"]').on('click', function(evt){\n    evt.preventDefault();\n    _getEmailAddresses($(this));\n});<\/code><\/pre>\n<p>La chiamata iniziale <strong>di ricezione<\/strong> dovrebbe assomigliare a <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">questa<\/a> :<\/p>\n<pre><code>var _getEmailAddresses = function($elem) {\n    $.get(acme_email_export.ajax_url, {\n        security:  acme_email_export.security,\n        action:    'getEmailAddresses'\n    }, function(response) {\n\n        if ('' === response) {\n            return;\n        }\n        \/\/ TODO...\n    });\n};<\/code><\/pre>\n<p>Si noti che utilizza il valore di sicurezza che abbiamo creato in precedenza e quindi utilizza il nome di un&#8217;altra funzione, ovvero <strong>getEmailAddresses<\/strong>, che sta chiamando sul lato server.<\/p>\n<p>Questa funzione \u00e8 responsabile dell&#8217;esecuzione di una query, dell&#8217;acquisizione degli indirizzi e-mail e della scrittura di un file JSON temporaneo da restituire all&#8217;utente.<\/p>\n<h4>1 Ottieni gli indirizzi e-mail degli utenti<\/h4>\n<p>Innanzitutto, <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a> consentir\u00e0 di ritirare tutti gli utenti per <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-04-get-email-addresses-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">determinati criteri<\/a>.<\/p>\n<pre><code>&lt;?php\nprivate function getUserResults()\n{\n    $query   = new WP_User_Query(\n        array(\n            'role_in' =&gt; array('administrator','subscriber')) );\n    return $query-&gt;get_results();\n}\n<\/code><\/pre>\n<p>Ai fini di questo esempio, sto ovviamente andando alla leggera sugli argomenti.<\/p>\n<h4>2 Analizza l&#8217;e-mail dai risultati<\/h4>\n<p>Successivamente, scorrer\u00f2 i risultati e memorizzer\u00f2 gli indirizzi e-mail <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-05-parse-email-results-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">in un array<\/a> (che alla fine convertir\u00f2 in JSON).<\/p>\n<pre><code>&lt;?php\n\nprivate function getUserInfo($results)\n{\n    $user_info = array();\n    foreach ($results as $result) {\n        if (isset($result-&gt;user_email)) {\n            array_push($user_info, $result-&gt;user_email);\n        }\n    }\n\n    return $user_info;\n}\n<\/code><\/pre>\n<p>Nota che ci sono altri modi per farlo. Questo \u00e8 solo un modo per farlo per un set di dati pi\u00f9 piccolo, ma se stai lavorando per qualcosa di un po&#8217; pi\u00f9 grande, ti consiglio un&#8217;alternativa (che va oltre lo scopo di questo post).<\/p>\n<h2>Avanti il \u200b\u200bprossimo<\/h2>\n<p>Ovviamente, questa \u00e8 solo la prima parte di come cablare tutto questo.<\/p>\n<p>Nel prossimo post tratter\u00f2:<\/p>\n<ul>\n<li>convertire le informazioni restituite in JSON,<\/li>\n<li>scrivendo quel file su disco,<\/li>\n<li>e come legare il resto insieme usando JavaScript.<\/li>\n<\/ul>\n<p>Il passaggio finale includer\u00e0 la creazione di un elemento e quindi l&#8217;attivazione del relativo evento clic in modo che all&#8217;utente venga presentata la finestra di dialogo di download anzich\u00e9 il testo effettivo in una finestra del browser.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>E se volessi semplificare il download degli indirizzi e-mail degli utenti tramite JSON all&#8217;interno di WordPress da, ad esempio, un menu di amministrazione o un sottomenu?<\/p>\n","protected":false},"author":1,"featured_media":224083,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[804,720,844,865],"tags":[1168],"class_list":["post-230158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230158"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230158\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}