{"id":229373,"date":"2022-11-13T17:51:00","date_gmt":"2022-11-13T14:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229373"},"modified":"2022-11-09T06:44:15","modified_gmt":"2022-11-09T03:44:15","slug":"hankige-kasutajate-aadressid-wordpressis-1-osa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/hankige-kasutajate-aadressid-wordpressis-1-osa\/","title":{"rendered":"Hankige kasutajate aadressid WordPressis, 1. osa"},"content":{"rendered":"\n<p>Oletame, et t\u00f6\u00f6tate projekti kallal, mille k\u00e4igus soovite anda kasutajale v\u00f5imaluse alla laadida k\u00f5ik WordPressi installis olevate kasutajate meiliaadressid. T\u00f5si, sellel on m\u00f5ned n\u00f5uded:<\/p>\n<ul>\n<li>Soovite, et seda teeksid ainult administraatorid,<\/li>\n<li>See peab olema turvaline nonce v\u00e4\u00e4rtuste kaudu,<\/li>\n<li>Vastused peaksid olema JSON-is,<\/li>\n<li>Ja soovite faili saatmiseks kasutada JavaScripti, kui see on allalaadimiseks valmis.<\/li>\n<\/ul>\n<p>K\u00f5iki \u00fclaltoodud m\u00f5isteid on siin t\u00f5en\u00e4oliselt varem k\u00e4sitletud, kuid mis siis, kui soovite need k\u00f5ik omavahel siduda? See t\u00e4hendab, mis siis, kui soovite muuta kasutajate e-posti aadresside allalaadimine JSON-i kaudu WordPressis lihtsaks, n\u00e4iteks haldusmen\u00fc\u00fcst v\u00f5i alammen\u00fc\u00fcst?<\/p>\n<p>Selle postituse kirjutamise ajal kohustuslik kaader sellest, kus ma t\u00f6\u00f6tan.<\/p>\n<p>Siin on \u00fcks viis selle probleemi lahendamiseks. Pange t\u00e4hele, et see eeldab, et teil on \u00fclaltooduga seotud teadmised, kuid ma teen k\u00f5ik endast oleneva, et k\u00f5iki \u00fclalmainituid k\u00e4sitleda.<\/p>\n<h2>Laadige kasutajate e-posti aadressid alla JSON-i kaudu<\/h2>\n<p>Enne alustamist pange t\u00e4hele, et seadistan selle toimima iga kord, kui kasutaja kl\u00f5psab WordPressi men\u00fc\u00fc <strong>T\u00f6\u00f6riistad alammen\u00fc\u00fcl.<\/strong><\/p>\n<p>Konksude seadistamine v\u00f5ib erineda. Olen hakanud kasutama teatud t\u00fc\u00fcpi arhitektuuri, mis on muutumas \u00fcha tavalisemaks projektides, mida kasutan nii enda jaoks kui ka <a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pressware&#8217;is<\/a>, kuid ma kaldun sellest k\u00f5rvale (v\u00f5ib-olla annan \u00fclevaate sellesse hiljem).<\/p>\n<h3>Alammen\u00fc\u00fc lisamine<\/h3>\n<p>Igatahes n\u00e4eb <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-00-add-submenu-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">alammen\u00fc\u00fc lisamise<\/a> kood v\u00e4lja j\u00e4rgmine .<\/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>See on t\u00e4pselt see, mida sa ootasid, eks? Kui kasutate objektorienteeritud koodi, peate v\u00f5ib-olla (v\u00f5i ka mitte, olenevalt sellest, kuidas olete oma lahenduse \u00fcles ehitanud) kasutama massiivi, et m\u00e4\u00e4rata praeguse klassi eksemplar ja selle meetod.<\/p>\n<p>Pange t\u00e4hele ka seda, et ma ei muretse selle postituse kontekstis rahvusvahelistumise p\u00e4rast. Asi pole selles, et seda ei saa teha; asi pole selles, et see poleks oluline. Iseasi, et postitus oleks v\u00f5imalikult lahja.<\/p>\n<h3>JavaScripti registreerimine<\/h3>\n<p>Eeldan, et\u00a0 teie profiilis asub fail <strong>exportEmail.js<\/strong> ja see on fail, mis vastutab serveripoolse p\u00e4ringu esitamise ja faili allalaadimiseks tagastamise eest.<\/p>\n<p>Esimene asi, mida teha, on JavaScripti turvaline registreerimine serveri poolel <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-01-register-javascript-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">standardsete API funktsioonide abil<\/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>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.<\/p>\n<h3>Kliendipool helistab serveri poolele<\/h3>\n<p>Kuna serveripoolse helistamise p\u00f5hit\u00f5ed on paigas, on JavaScripti kohe v\u00f5imalik seadistada.<\/p>\n<p>Esiteks on seal <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-02-click-handler-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">klikkide t\u00f6\u00f6tleja<\/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>Esialgne\u00a0 k\u00f5ne <strong>peaks<\/strong> v\u00e4lja n\u00e4gema umbes <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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>Pange t\u00e4hele, et see kasutab meie varem loodud turvav\u00e4\u00e4rtust ja seej\u00e4rel teise funktsiooni nime <strong>getEmailAddresses<\/strong>, mida see serveri poolel kutsub.<\/p>\n<p>See funktsioon vastutab p\u00e4ringu k\u00e4itamise, e-posti aadresside haaramise ja kasutajale naasmiseks ajutise JSON-faili kirjutamise eest.<\/p>\n<h4>1 Hankige kasutajate e-posti aadressid<\/h4>\n<p>Esiteks v\u00f5imaldab <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a> <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-04-get-email-addresses-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">teatud kriteeriumide alusel<\/a> k\u00f5ik kasutajad tagasi t\u00f5mmata .<\/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>Selle n\u00e4ite puhul k\u00e4sitlen ma ilmselgelt argumente.<\/p>\n<h4>2 S\u00f5eluge e-kiri tulemustest v\u00e4lja<\/h4>\n<p>J\u00e4rgmisena kordan tulemusi ja salvestan e-posti aadressid <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-05-parse-email-results-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">massiivi<\/a> (mille teisendan l\u00f5puks JSON-iks).<\/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>Pange t\u00e4hele, et selleks on ka teisi viise. See on vaid \u00fcks viis v\u00e4iksema andmehulga jaoks, kuid kui t\u00f6\u00f6tate millegi suurema nimel, siis soovitan alternatiivi (mis ei kuulu selle postituse ulatusse).<\/p>\n<h2>J\u00e4rgmisena<\/h2>\n<p>Ilmselgelt on see vaid esimene osa sellest, kuidas seda k\u00f5ike \u00fchendada.<\/p>\n<p>J\u00e4rgmises postituses k\u00e4sitlen j\u00e4rgmist:<\/p>\n<ul>\n<li>tagastatud teabe teisendamine JSON-iks,<\/li>\n<li>selle faili kettale kirjutamine,<\/li>\n<li>ja kuidas \u00fclej\u00e4\u00e4nud osa JavaScripti abil kokku siduda.<\/li>\n<\/ul>\n<p>Viimane samm h\u00f5lmab elemendi loomist ja seej\u00e4rel selle kl\u00f5psamiss\u00fcndmuse k\u00e4ivitamist, nii et kasutajale kuvatakse allalaadimisdialoog, mitte brauseriaknas tegelik tekst.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mida teha, kui soovite muuta kasutajate e-posti aadresside allalaadimine JSON-i kaudu WordPressis lihtsaks, n\u00e4iteks haldusmen\u00fc\u00fcst v\u00f5i alammen\u00fc\u00fcst?<\/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":[718,842,802,863],"tags":[1165],"class_list":["post-229373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229373"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}