{"id":229814,"date":"2022-11-13T18:15:00","date_gmt":"2022-11-13T15:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229814"},"modified":"2022-11-09T16:29:41","modified_gmt":"2022-11-09T13:29:41","slug":"obtenir-les-adresses-des-utilisateurs-dans-wordpress-partie-1","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/obtenir-les-adresses-des-utilisateurs-dans-wordpress-partie-1\/","title":{"rendered":"Obtenir les adresses des utilisateurs dans WordPress, partie 1"},"content":{"rendered":"\n<p>Supposons que vous travaillez sur un projet dans lequel vous souhaitez fournir \u00e0 l&rsquo;utilisateur la possibilit\u00e9 de t\u00e9l\u00e9charger toutes les adresses e-mail des utilisateurs qui existent dans l&rsquo;installation de WordPress. Certes, cela a quelques exigences:<\/p>\n<ul>\n<li>Vous voulez que seuls les administrateurs le fassent,<\/li>\n<li>Il doit \u00eatre s\u00e9curis\u00e9 via des valeurs nonce,<\/li>\n<li>Les r\u00e9ponses doivent \u00eatre en JSON,<\/li>\n<li>Et vous souhaitez utiliser JavaScript pour envoyer le fichier lorsqu&rsquo;il est pr\u00eat \u00e0 \u00eatre t\u00e9l\u00e9charg\u00e9.<\/li>\n<\/ul>\n<p>Chacun des concepts ci-dessus a probablement d\u00e9j\u00e0 \u00e9t\u00e9 abord\u00e9 ici, mais que se passe-t-il si vous cherchez \u00e0 les lier tous ensemble\u00a0? Autrement dit, que se passe-t-il si vous souhaitez faciliter le t\u00e9l\u00e9chargement des adresses e-mail des utilisateurs via JSON dans WordPress \u00e0 partir, par exemple, d&rsquo;un menu d&rsquo;administration ou d&rsquo;un sous-menu\u00a0?<\/p>\n<p>Une photo obligatoire de l&rsquo;endroit o\u00f9 je travaille en \u00e9crivant ce post.<\/p>\n<p>Voici une fa\u00e7on de r\u00e9soudre ce probl\u00e8me. Notez que cela suppose que vous avez une certaine connaissance de ce qui pr\u00e9c\u00e8de, mais je ferai ce que je peux pour couvrir chacun des \u00e9l\u00e9ments ci-dessus.<\/p>\n<h2>T\u00e9l\u00e9charger les adresses e-mail des utilisateurs via JSON<\/h2>\n<p>Avant de commencer, notez que je le configure pour qu&rsquo;il fonctionne chaque fois qu&rsquo;un utilisateur clique sur un sous-menu du\u00a0 menu <strong>Outils<\/strong> dans WordPress.<\/p>\n<p>La fa\u00e7on dont vous configurez vos crochets peut varier. J&rsquo;ai commenc\u00e9 \u00e0 utiliser un peu un type particulier d&rsquo;architecture qui devient de plus en plus standard dans les projets que j&rsquo;utilise \u00e0 la fois pour moi et que nous utilisons chez <a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pressware<\/a>, mais je m&rsquo;\u00e9carte de cela pour cela (peut-\u00eatre que je vais donner un aper\u00e7u dans ce plus tard).<\/p>\n<h3>Ajout d&rsquo;un sous-menu<\/h3>\n<p>Quoi qu&rsquo;il en soit, voici \u00e0 quoi ressemble le code pour <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-00-add-submenu-page-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ajouter le sous-menu<\/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>C&rsquo;est exactement ce \u00e0 quoi vous vous attendiez, non\u00a0? Si vous utilisez du code orient\u00e9 objet, vous devrez peut-\u00eatre (ou non, selon la mani\u00e8re dont vous avez con\u00e7u votre solution) utiliser un tableau pour sp\u00e9cifier une instance de la classe actuelle et sa m\u00e9thode.<\/p>\n<p>Notez \u00e9galement que je ne vais pas m&rsquo;inqui\u00e9ter de l&rsquo;internationalisation dans le cadre de ce billet. Ce n&rsquo;est pas que cela ne peut pas \u00eatre fait; ce n&rsquo;est pas que ce n&rsquo;est pas important. Il s&rsquo;agit d&rsquo;essayer de garder le poste aussi maigre que possible.<\/p>\n<h3>Enregistrement du JavaScript<\/h3>\n<p>Je vais supposer que vous avez un\u00a0 fichier <strong>exportEmail.js<\/strong> situ\u00e9 dans votre profil et c&rsquo;est le fichier qui sera charg\u00e9 d&rsquo;interroger le c\u00f4t\u00e9 serveur et de renvoyer le fichier en t\u00e9l\u00e9chargement.<\/p>\n<p>La premi\u00e8re chose \u00e0 faire est d&rsquo;enregistrer en toute s\u00e9curit\u00e9 le JavaScript c\u00f4t\u00e9 serveur \u00e0 l&rsquo;aide <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-01-register-javascript-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">des fonctions standard de l&rsquo;API<\/a>\u00a0:<\/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>Une fois cela fait, vous pouvez \u00e9crire le JavaScript qui appellera le c\u00f4t\u00e9 serveur. Mais il s&rsquo;agit d&rsquo;une \u00e9tape en deux parties\u00a0: elle inclut \u00e0 la fois JavaScript, puis davantage de code c\u00f4t\u00e9 serveur.<\/p>\n<h3>Le c\u00f4t\u00e9 client appelle le c\u00f4t\u00e9 serveur<\/h3>\n<p>\u00c9tant donn\u00e9 que les bases sont en place pour appeler le c\u00f4t\u00e9 serveur, il est possible de configurer le JavaScript maintenant.<\/p>\n<p>Tout d&rsquo;abord, il y a <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-02-click-handler-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le gestionnaire de clic<\/a>\u00a0:<\/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><strong>L&rsquo;appel get<\/strong> initial devrait ressembler \u00e0 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-03-get-email-addresses-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ceci<\/a>\u00a0:<\/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>Notez qu&rsquo;il utilise la valeur de s\u00e9curit\u00e9 que nous avons cr\u00e9\u00e9e pr\u00e9c\u00e9demment, puis le nom d&rsquo;une autre fonction, \u00e0 savoir <strong>getEmailAddresses<\/strong>, qu&rsquo;il appelle c\u00f4t\u00e9 serveur.<\/p>\n<p>Cette fonction est responsable de l&rsquo;ex\u00e9cution d&rsquo;une requ\u00eate, de la saisie des adresses e-mail et de l&rsquo;\u00e9criture d&rsquo;un fichier JSON temporaire \u00e0 renvoyer \u00e0 l&rsquo;utilisateur.<\/p>\n<h4>1 Obtenir les adresses e-mail des utilisateurs<\/h4>\n<p>Premi\u00e8rement, <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_User_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_User_Query<\/a> va permettre de retirer tous les utilisateurs pour <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13576030a7f1f2f62580935c655421b1#file-04-get-email-addresses-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">certains crit\u00e8res<\/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>Aux fins de cet exemple, je vais \u00e9videmment all\u00e9ger les arguments.<\/p>\n<h4>2 Analyser l&rsquo;e-mail des r\u00e9sultats<\/h4>\n<p>Ensuite, je vais parcourir les r\u00e9sultats et stocker les adresses 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\">dans un tableau<\/a> (que je convertirai \u00e9ventuellement en 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>Notez qu&rsquo;il existe d&rsquo;autres fa\u00e7ons de le faire. Ce n&rsquo;est qu&rsquo;une fa\u00e7on de le faire pour un ensemble de donn\u00e9es plus petit, mais si vous travaillez pour quelque chose d&rsquo;un peu plus grand, alors je recommande une alternative (qui d\u00e9passe le cadre de cet article).<\/p>\n<h2>Suivant<\/h2>\n<p>De toute \u00e9vidence, ce n&rsquo;est que la premi\u00e8re partie de la fa\u00e7on de c\u00e2bler tout cela.<\/p>\n<p>Dans le prochain article, je couvrirai\u00a0:<\/p>\n<ul>\n<li>convertir les informations retourn\u00e9es en JSON,<\/li>\n<li>\u00e9crire ce fichier sur le disque,<\/li>\n<li>et comment lier le reste en utilisant JavaScript.<\/li>\n<\/ul>\n<p>La derni\u00e8re \u00e9tape comprendra la cr\u00e9ation d&rsquo;un \u00e9l\u00e9ment, puis le d\u00e9clenchement de son \u00e9v\u00e9nement de clic afin que l&rsquo;utilisateur se voit pr\u00e9senter la bo\u00eete de dialogue de t\u00e9l\u00e9chargement plut\u00f4t que le texte r\u00e9el dans une fen\u00eatre de navigateur.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Que se passe-t-il si vous souhaitez faciliter le t\u00e9l\u00e9chargement des adresses e-mail des utilisateurs via JSON dans WordPress \u00e0 partir, par exemple, d&rsquo;un menu d&rsquo;administration ou d&rsquo;un sous-menu\u00a0?<\/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":[717,801,841,862],"tags":[1167],"class_list":["post-229814","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229814"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229814\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224083"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}