{"id":229263,"date":"2022-11-14T13:57:00","date_gmt":"2022-11-14T10:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229263"},"modified":"2022-11-14T13:57:22","modified_gmt":"2022-11-14T10:57:22","slug":"uzyskaj-adresy-uzytkownikow-w-wordpress-czesc-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/uzyskaj-adresy-uzytkownikow-w-wordpress-czesc-2\/","title":{"rendered":"Uzyskaj adresy u\u017cytkownik\u00f3w w WordPress, cz\u0119\u015b\u0107 2"},"content":{"rendered":"\n<p>W <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/uzyskaj-adresy-uzytkownikow-w-wordpress-czesc-1\/\" title=\"poprzednim po\u015bcie\">poprzednim po\u015bcie<\/a> zacz\u0105\u0142em udost\u0119pnia\u0107, jak pobiera\u0107 adresy e-mail u\u017cytkownik\u00f3w przez JSON w WordPressie (za pomoc\u0105 Ajax). Pierwszy artyku\u0142 obejmowa\u0142:<\/p>\n<ol>\n<li>rejestracja JavaScript w tym celu<\/li>\n<li>pozyskiwanie adres\u00f3w e-mail u\u017cytkownik\u00f3w,<\/li>\n<li>i analizowanie wynik\u00f3w.<\/li>\n<\/ol>\n<p>Jest jednak wi\u0119cej do zrobienia. Mianowicie:<\/p>\n<ol>\n<li>konwersja zwr\u00f3conych informacji do formatu JSON,<\/li>\n<li>zapisanie tego pliku na dysku,<\/li>\n<li>i jak powi\u0105za\u0107 reszt\u0119 za pomoc\u0105 JavaScript.<\/li>\n<\/ol>\n<p>I o tym b\u0119dzie mowa w dalszej cz\u0119\u015bci tego postu. Wi\u0119c je\u015bli nie czyta\u0142e\u015b <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/uzyskaj-adresy-uzytkownikow-w-wordpress-czesc-1\/\" title=\"poprzedniego artyku\u0142u\">poprzedniego artyku\u0142u<\/a>, polecam go cho\u0107by z powodu spojrzenia na kod, aby zobaczy\u0107 go do tej pory.<\/p>\n<h2>Adresy e-mail u\u017cytkownik\u00f3w za po\u015brednictwem JSON, ci\u0105g dalszy<\/h2>\n<p>Opr\u00f3cz tego, \u017ce istniej\u0105 inne sposoby obs\u0142ugi tego samego procesu (niekt\u00f3re bardziej wydajne w zale\u017cno\u015bci od liczby u\u017cytkownik\u00f3w), zauwa\u017c, \u017ce do tego u\u017cywam <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jQuery<\/a> (zamiast waniliowego JavaScript). Niekt\u00f3rzy ludzie nie s\u0105 fanami tego i to jest fajne, ale nie mam na to przyk\u0142ad\u00f3w w tym po\u015bcie.<\/p>\n<p>Wybieram te przyk\u0142ady, poniewa\u017c jQuery jest dostarczane z WordPressem, wielu programist\u00f3w WordPressa z niego korzysta, pasuje do tej sytuacji i [nadal] mi si\u0119 podoba.<\/p>\n<p>Powiedziawszy to, wr\u00f3c\u0119 od miejsca, w kt\u00f3rym sko\u0144czy\u0142em.<\/p>\n<h3>1 Konwertuj tablic\u0119 na JSON<\/h3>\n<p>Je\u015bli znasz PHP, jest to \u0142atwe do zrobienia; ale je\u015bli nie, to nic wielkiego. Najpierw <a href=\"https:\/\/php.net\/manual\/en\/function.json-encode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">przejrzyj json_encode<\/a> w podr\u0119czniku PHP. Zauwa\u017c, \u017ce pobiera tablic\u0119 i zwr\u00f3ci j\u0105 jako sformatowany ci\u0105g.<\/p>\n<p>To jest to, czego u\u017cywam do konwersji tablicy adres\u00f3w e-mail na ci\u0105g JSON, kt\u00f3ry ostatecznie zostanie zapisany na dysku. To jedna linijka kodu.<\/p>\n<pre><code>json_encode($user_results);<\/code><\/pre>\n<p>Pami\u0119taj jednak, \u017ce istnieje funkcja, kt\u00f3ra w razie potrzeby wygeneruje wyniki u\u017cytkownika. W szczeg\u00f3lno\u015bci wywo\u0142a\u0142em funkcj\u0119 <strong>getUserInfo<\/strong> i za chwil\u0119 j\u0105 udost\u0119pni\u0119.<\/p>\n<p>Poniewa\u017c poniewa\u017c zamierzamy wys\u0142a\u0107 plik do u\u017cytkownika, informacje musz\u0105 zosta\u0107 zapisane na dysku.<\/p>\n<h3>2 Zapisz to na dysku<\/h3>\n<p>W tym momencie nadszed\u0142 czas na zapisanie wynik\u00f3w na dysku. W zale\u017cno\u015bci od uprawnie\u0144 serwera, mo\u017cesz mie\u0107 mo\u017cliwo\u015b\u0107 zapisania pliku na dysku bezpo\u015brednio w katalogu wtyczki; w przeciwnym razie mo\u017ce by\u0107 konieczne u\u017cycie\u00a0 katalogu <strong>uploads<\/strong>.<\/p>\n<p>Zak\u0142adaj\u0105c, \u017ce pracujesz z pierwszym, oto jak wygl\u0105da <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-06-write-json-to-disk-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pe\u0142na funkcja :<\/a><\/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>Najpierw sprawdza, czy istnieje <strong>plik results.json .<\/strong> Je\u015bli nie, utworzy pusty plik. Nast\u0119pnie otwiera plik do zapisu, wrzuca zawarto\u015b\u0107 tablicy w formacie JSON do pliku, a nast\u0119pnie zamyka zas\u00f3b.<\/p>\n<p>Teraz plik znajduje si\u0119 na dysku, wi\u0119c czas wys\u0142a\u0107 go u\u017cytkownikowi za pomoc\u0105 JavaScript.<\/p>\n<h3>3 Wy\u015blij go do u\u017cytkownika<\/h3>\n<p>Najpierw przyjrzymy si\u0119\u00a0 funkcji JavaScript <strong>_getEmailAddresses\u00a0<\/strong> z poprzedniego postu. Mo\u017cesz zobaczy\u0107 dotychczasow\u0105 prac\u0119 w <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tym sednie<\/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=\"Uzyskaj adresy u\u017cytkownik\u00f3w w WordPress, cz\u0119\u015b\u0107 2\"><\/a><\/p>\n<p>Zauwa\u017c, \u017ce pierwsz\u0105 rzecz\u0105 do zrobienia jest wywo\u0142anie funkcji po stronie serwera, kt\u00f3r\u0105 zdecydowa\u0142em si\u0119 wywo\u0142a\u0107 <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>. Zauwa\u017c, \u017ce uruchamia zapytanie, generuje tablic\u0119, zapisuje plik na dysku i <strong>echo<em><\/em><\/strong> podaje <strong>nazw\u0119 pliku do funkcji JavaScript (poniewa\u017c WordPress wymaga echa zamiast<\/strong> powrotu<em><\/em> dla wywo\u0142a\u0144 Ajax):<\/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>Zauwa\u017c, \u017ce s\u0105 to trzy wywo\u0142ania funkcji, z kt\u00f3rych ka\u017cde przyjmuje wyniki drugiego jako parametr, a nast\u0119pnie wywo\u0142uje echo <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> z nazw\u0105 pliku, kt\u00f3rego zdecydowa\u0142em si\u0119 u\u017cy\u0107 (wyra\u017anie <strong>results.json<\/strong> ).<\/p>\n<h3>4 Wysy\u0142anie pliku przez JavaScript<\/h3>\n<p>Tutaj sprawa staje si\u0119 nieco bardziej skomplikowana. Kod musi:<\/p>\n<ol>\n<li>upewnij si\u0119, \u017ce jest poprawna odpowied\u017a,<\/li>\n<li>je\u015bli tak, to dynamicznie utworzy ukryt\u0105 kotwic\u0119<\/li>\n<li>wywo\u0142a\u0107 zdarzenie klikni\u0119cia kotwicy, aby zasymulowa\u0107 klikni\u0119cie przez u\u017cytkownika.<\/li>\n<\/ol>\n<p>Ma sens? Sprawd\u017a poni\u017cej wyniki <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-08-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funkcji anonimowej<\/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\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>Spowoduje to wy\u015bwietlenie\u00a0 u\u017cytkownikowi okna dialogowego <strong>pobierania pliku<\/strong> i umo\u017cliwi wy\u015bwietlenie pliku JSON utworzonego w tym i poprzednim po\u015bcie.<\/p>\n<h2>Ot\u00f3\u017c \u200b\u200bto?<\/h2>\n<p>Zasadniczo tak. To prawda, \u017ce \u200b\u200bmo\u017ce by\u0107 konieczne wprowadzenie poprawek w kodzie serwera WWW, ale og\u00f3lna idea pozostaje taka sama:<\/p>\n<ol>\n<li>uruchomi\u0107 zapytanie,<\/li>\n<li>wygenerowa\u0107 tablic\u0119,<\/li>\n<li>przekonwertuj go na JSON,<\/li>\n<li>zapisz to na dysku,<\/li>\n<li>wy\u015blij plik do u\u017cytkownika<\/li>\n<\/ol>\n<p>I tak, mo\u017cesz zdecydowa\u0107 si\u0119 na u\u017cycie standard\u00f3w kodowania WordPress (w por\u00f3wnaniu z PSR2), waniliowego JavaScript (w por\u00f3wnaniu z jQuery) i tak dalej.<\/p>\n<p>Niezale\u017cnie od tego procedura pozostaje taka sama i jest to jeden ze sposob\u00f3w, w jaki mo\u017cesz zapewni\u0107 spos\u00f3b pobierania adres\u00f3w e-mail u\u017cytkownik\u00f3w za po\u015brednictwem JSON w WordPress.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To druga z dw\u00f3ch cz\u0119\u015bci tego, jak pobra\u0107 adresy e-mail u\u017cytkownik\u00f3w za po\u015brednictwem JSON w WordPress z menu administracyjnego lub podmenu?<\/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":[721,897,845],"tags":[1169],"class_list":["post-229263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229263"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229263\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/165738"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}