{"id":229164,"date":"2022-11-14T13:54:00","date_gmt":"2022-11-14T10:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229164"},"modified":"2022-11-14T13:58:55","modified_gmt":"2022-11-14T10:58:55","slug":"faa-anvaendaradresser-i-wordpress-del-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/faa-anvaendaradresser-i-wordpress-del-2\/","title":{"rendered":"F\u00e5 anv\u00e4ndaradresser i WordPress, del 2"},"content":{"rendered":"\n<p>I <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/faa-anvaendaradresser-i-wordpress-del-1\/\" title=\"det tidigare inl\u00e4gget\">det tidigare inl\u00e4gget<\/a> b\u00f6rjade jag dela hur man laddar ner anv\u00e4ndarnas e-postadresser via JSON i WordPress (med Ajax). Den f\u00f6rsta artikeln t\u00e4ckte:<\/p>\n<ol>\n<li>registrera JavaScript f\u00f6r att g\u00f6ra det<\/li>\n<li>f\u00e5 anv\u00e4ndarnas e-postadresser,<\/li>\n<li>och analysera resultaten.<\/li>\n<\/ol>\n<p>Det finns dock mer att g\u00f6ra. N\u00e4mligen:<\/p>\n<ol>\n<li>konvertera den returnerade informationen till JSON,<\/li>\n<li>skriva den filen till disk,<\/li>\n<li>och hur man knyter ihop resten av det med JavaScript.<\/li>\n<\/ol>\n<p>Och det \u00e4r vad resten av det h\u00e4r inl\u00e4gget kommer att t\u00e4cka. S\u00e5 om du inte har l\u00e4st <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/faa-anvaendaradresser-i-wordpress-del-1\/\" title=\"den f\u00f6reg\u00e5ende artikeln\">den f\u00f6reg\u00e5ende artikeln<\/a> rekommenderar jag det om inte av n\u00e5gon annan anledning \u00e4n att titta p\u00e5 koden f\u00f6r att se den hittills.<\/p>\n<h2>Anv\u00e4ndares e-postadresser via JSON, forts\u00e4ttning<\/h2>\n<p>Bortsett fr\u00e5n det faktum att det finns andra s\u00e4tt att hantera samma process (n\u00e5gra mer presterande beroende p\u00e5 antalet anv\u00e4ndare), notera att jag anv\u00e4nder <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a> (snarare \u00e4n vanilla JavaScript) f\u00f6r att g\u00f6ra detta. Vissa m\u00e4nniskor \u00e4r inte fans av att g\u00f6ra det h\u00e4r, och det \u00e4r coolt, men jag har inga exempel p\u00e5 det i det h\u00e4r inl\u00e4gget.<\/p>\n<p>Jag v\u00e4ljer dessa exempel eftersom jQuery levereras med WordPress, m\u00e5nga WordPress-utvecklare anv\u00e4nder det, det passar f\u00f6r den h\u00e4r situationen och jag [fortfarande] gillar det. \ud83d\ude42<\/p>\n<p>Med det sagt, jag forts\u00e4tter d\u00e4r jag slutade.<\/p>\n<h3>1 Konvertera en array till JSON<\/h3>\n<p>Om du \u00e4r bekant med PHP s\u00e5 \u00e4r detta n\u00e5got som \u00e4r l\u00e4tt att g\u00f6ra; men om inte \u00e4r det ingen stor sak. G\u00e5 f\u00f6rst igenom <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">json_encode<\/a> i PHP-manualen. Observera att den tar en array och returnerar den som en formaterad str\u00e4ng.<\/p>\n<p>Det h\u00e4r \u00e4r vad jag anv\u00e4nder f\u00f6r att konvertera m\u00e4ngden e-postadresser till en str\u00e4ng av JSON som s\u00e5 sm\u00e5ningom kommer att skrivas till disken. Det \u00e4r en rad kod.<\/p>\n<pre><code>json_encode($user_results);<\/code><\/pre>\n<p>Kom dock ih\u00e5g att det finns en funktion som genererar anv\u00e4ndarresultaten efter behov. Specifikt kallade jag funktionen <strong>getUserInfo<\/strong>, och jag kommer att dela den ett \u00f6gonblick.<\/p>\n<p>Eftersom vi ska skicka en fil till anv\u00e4ndaren m\u00e5ste informationen skrivas till disken.<\/p>\n<h3>2 Skriv det till disk<\/h3>\n<p>Vid det h\u00e4r laget \u00e4r det dags att skriva resultaten till disken. Beroende p\u00e5 beh\u00f6righeterna f\u00f6r din server kan du kanske skriva filen till disken direkt i pluginens katalog; annars kan du beh\u00f6va anv\u00e4nda <strong>uppladdningskatalogen<\/strong>.<\/p>\n<p>Om du antar att du anv\u00e4nder den f\u00f6rra, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-06-write-json-to-disk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r ser hela funktionen<\/a> ut:<\/p>\n<pre><code>&lt;?php\n\nprivate function writeAddressesToDisk($addresses)\n{\n    $path = plugin_dir_path(__FILE__). 'results.json';\n    if (!file_exists($path)) {\n        touch($path);\n    }\n\n    $handle = fopen($path, 'w');\n    fwrite($handle, json_encode($addresses));\n    fclose($handle);\n}\n<\/code><\/pre>\n<p>F\u00f6rst kontrollerar den om <strong>results.json<\/strong> finns. Om inte, kommer det att skapa en tom fil. Efter det \u00f6ppnar den filen f\u00f6r skrivning, sl\u00e4pper inneh\u00e5llet i arrayen i JSON-formatet i filen och st\u00e4nger sedan resursen.<\/p>\n<p>Nu finns filen p\u00e5 disk, s\u00e5 det \u00e4r dags att skicka den till anv\u00e4ndaren med JavaScript.<\/p>\n<h3>3 Skicka den till anv\u00e4ndaren<\/h3>\n<p>F\u00f6rst kommer vi att\u00a0 \u00e5terbes\u00f6ka JavaScript-funktionen <strong>_getEmailAddresses\u00a0<\/strong> fr\u00e5n f\u00f6reg\u00e5ende inl\u00e4gg. Du kan se det arbete som gjorts hittills i <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den h\u00e4r sammanfattningen<\/a>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165737-61e787fe98980.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165737-61e787fe98980.png\" alt=\"F\u00e5 anv\u00e4ndaradresser i WordPress, del 2\"><\/a><\/p>\n<p>Observera att det f\u00f6rsta du ska g\u00f6ra \u00e4r att anropa en funktion p\u00e5 serversidan som jag har valt att anropa <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-07-get-email-addresses-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">getEmailAddresses<\/a>. Observera att den k\u00f6r fr\u00e5gan, genererar arrayen, skriver filen till disken och <strong>eko<em><\/em><\/strong> es <strong>filnamnet till JavaScript-funktionen (eftersom WordPress kr\u00e4ver ett eko snarare \u00e4n en<\/strong> retur<em><\/em> f\u00f6r Ajax-anrop):<\/p>\n<pre><code>&lt;?php\n\npublic function getEmailAddresses()\n{\n    $this-&gt;writeAddressesToDisk(\n        $this-&gt;getUserInfo(\n            $this-&gt;getUserResults()) );\n\n    echo plugin_dir_url(__FILE__). 'results.json';\n    die;\n}\n<\/code><\/pre>\n<p>L\u00e4gg m\u00e4rke till att detta \u00e4r tre funktionsanrop som var och en tar resultatet av den andra som en parameter och sedan ekar <strong><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/plugin_dir_url\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">plugin_dir_url<\/a><\/strong> med namnet p\u00e5 filen jag har valt att anv\u00e4nda (klart <strong>results.json<\/strong> ).<\/p>\n<h3>4 Skicka filen via JavaScript<\/h3>\n<p>Det \u00e4r h\u00e4r det blir lite mer komplicerat. Koden beh\u00f6ver:<\/p>\n<ol>\n<li>se till att det finns ett korrekt svar,<\/li>\n<li>om s\u00e5 \u00e4r fallet kommer det dynamiskt att skapa ett dolt ankare<\/li>\n<li>utl\u00f6sa ankarets klickh\u00e4ndelse f\u00f6r att simulera en anv\u00e4ndare som klickar p\u00e5 den.<\/li>\n<\/ol>\n<p>Vettigt? Kolla in resultatet av <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-08-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">den anonyma funktionen<\/a> nedan:<\/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\n        \/\/ Creates the element to download the file.\n        $('&lt;a&gt;&lt;\/a&gt;')\n            .attr('href', response)\n            .attr('download', 'response.json')\n            .attr('id', 'acme-download-emails')\n            .text('Download')\n            .attr('style', 'display:none')\n            .appendTo($elem.parent());\n\n        \/\/ Manually trigger clicking of the hidden element to download the file.\n        $('#acme-download-emails')[0].click();\n    });\n};<\/code><\/pre>\n<p>Detta kommer att visa\u00a0 dialogrutan f\u00f6r <strong>nedladdningsfilen<\/strong> f\u00f6r anv\u00e4ndaren och till\u00e5ta dem att visa JSON-filen som skapats genom detta och f\u00f6reg\u00e5ende inl\u00e4gg.<\/p>\n<h2>Det \u00e4r allt?<\/h2>\n<p>I huvudsak, ja. Visst, du kan beh\u00f6va g\u00f6ra justeringar av din kod f\u00f6r din webbserver, men den allm\u00e4nna id\u00e9n f\u00f6rblir densamma:<\/p>\n<ol>\n<li>k\u00f6r fr\u00e5gan,<\/li>\n<li>generera en array,<\/li>\n<li>konvertera det till JSON,<\/li>\n<li>skriv det till disk,<\/li>\n<li>skicka filen till anv\u00e4ndaren<\/li>\n<\/ol>\n<p>Och ja, du kan v\u00e4lja att anv\u00e4nda WordPress-kodningsstandarderna (mot PSR2), vanilla JavaScript (mot jQuery) och s\u00e5 vidare.<\/p>\n<p>Oavsett vilket f\u00f6rblir proceduren densamma och detta \u00e4r ett s\u00e4tt som du kan tillhandah\u00e5lla ett s\u00e4tt att ladda ner anv\u00e4ndarnas e-postadresser via JSON i WordPress.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Detta \u00e4r den andra av tv\u00e5 delar av hur man laddar ner anv\u00e4ndarens e-postadresser via JSON i WordPress fr\u00e5n, en administrationsmeny eller en undermeny?<\/p>\n","protected":false},"author":1,"featured_media":165738,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,724],"tags":[1173],"class_list":["post-229164","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229164"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229164\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/165738"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}