{"id":231288,"date":"2022-12-19T10:35:00","date_gmt":"2022-12-19T07:35:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231288"},"modified":"2022-12-07T10:03:08","modified_gmt":"2022-12-07T07:03:08","slug":"widgets-wordpress-refactorisation-partie-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/widgets-wordpress-refactorisation-partie-9\/","title":{"rendered":"Widgets WordPress : refactorisation, partie 9"},"content":{"rendered":"\n<p>Bien que le dernier article de cette s\u00e9rie de refactoring n&rsquo;ait pas \u00e9t\u00e9 incroyablement long, je pense qu&rsquo;il \u00e9tait un peu dense. Autrement dit, il a fallu beaucoup de travail pour obtenir le code dans un endroit o\u00f9 nous pouvons plus facilement travailler avec.<\/p>\n<p>Mais c&rsquo;est juste \u00e7a: tout le travail que nous avons fait devrait permettre d&rsquo;avancer plus facilement avec le reste du code que nous devons \u00e9crire.<\/p>\n<p>Et pour nous assurer que nous profitons du travail et des bases que nous avons pos\u00e9s jusqu&rsquo;\u00e0 pr\u00e9sent, nous allons compl\u00e9ter la s\u00e9rie avec un ensemble d&rsquo;articles plus courts et plus cibl\u00e9s qui devraient prendre moins de temps \u00e0 lire, \u00e0 mettre en \u0153uvre, et comprendre ce que nous faisons avec le code.<\/p>\n<h2>Le passe-partout du widget WordPress\u00a0: refactorisation de la partie\u00a09<\/h2>\n<p>Rappel du dernier post :<\/p>\n<blockquote>\n<p>Ensuite, nous continuerons \u00e0 d\u00e9velopper des fonctionnalit\u00e9s pour la zone administrative du widget. Apr\u00e8s cela, nous porterons notre attention sur le c\u00f4t\u00e9 public du widget ainsi que sur la fonctionnalit\u00e9 de s\u00e9rialisation.<\/p>\n<\/blockquote>\n<p>Et cela nous pr\u00e9pare exactement o\u00f9 nous nous dirigeons dans ce poste particulier. A savoir, nous allons \u00e9crire un front-end administratif qui nous permet de :<\/p>\n<ul>\n<li>d\u00e9finir un titre pour le widget,<\/li>\n<li>d\u00e9finir le contenu textuel du widget,<\/li>\n<li>et basculez si nous voulons ou non afficher le titre.<\/li>\n<\/ul>\n<p>Il n&rsquo;est pas cens\u00e9 \u00eatre innovant ni \u00eatre le type de widget que quelqu&rsquo;un d&rsquo;autre pourrait vouloir vendre. Au lieu de cela, il est destin\u00e9 \u00e0 montrer comment nous pouvons prendre ce que nous avons pour cr\u00e9er quelque chose de similaire \u00e0 ce que nous avons d\u00e9j\u00e0 vu dans WordPress et comment nous utilisons des pratiques de programmation solides.<\/p>\n<h3>L&rsquo;interface utilisateur\u00a0: un premier passage<\/h3>\n<p>Apr\u00e8s notre travail la derni\u00e8re fois, nous avons un widget qui appara\u00eet dans la zone administrative de WordPress et il peut m\u00eame \u00eatre d\u00e9plac\u00e9 dans une barre lat\u00e9rale ou une autre zone widgetis\u00e9e ; cependant, cela ne fait rien.<\/p>\n<p>Pour l&rsquo;instant, allons-y et ajoutons trois \u00e9l\u00e9ments \u00e0 l&rsquo;interface utilisateur\u00a0:<\/p>\n<ol>\n<li>ajouter une entr\u00e9e de texte pour le titre du widget,<\/li>\n<li>inclure un \u00e9l\u00e9ment textarea pour afficher ce qui peut \u00eatre un paragraphe de texte,<\/li>\n<li>et enfin, ajoutez une case \u00e0 cocher pour basculer les informations sur le titre.<\/li>\n<\/ol>\n<p>Pour ce faire, nous devrons \u00e9diter un fichier dans le\u00a0 r\u00e9pertoire <strong>Views<\/strong>. A savoir, nous allons mettre \u00e0 jour le\u00a0 fichier <strong>Admin.php<\/strong>. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Nous commencerons avec les \u00e9l\u00e9ments<\/a> exactement comme n\u00e9cessaire sans aucun balisage superflu.<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Cela ne fera pas grand-chose \u00e0 regarder sur le front-end, mais cela nous rapproche de l&rsquo;endroit o\u00f9 nous voulons \u00eatre.<\/p>\n<h3>Une classe pour les administrateurs<\/h3>\n<p>Ensuite, nous voulons nous assurer que nous restons coh\u00e9rents en maintenant un haut niveau de coh\u00e9sion avec nos classes. Cela signifie que nous n&rsquo;avons pas besoin d&rsquo;une seule classe pour tout faire pour l&rsquo;administration, l&rsquo;affichage et tous les autres travaux requis par l&rsquo;API WordPress.<\/p>\n<p>\u00c0 cette fin, nous allons cr\u00e9er une deuxi\u00e8me classe appel\u00e9e <strong>WidgetAdmin<\/strong> dans le\u00a0 r\u00e9pertoire et l&rsquo;espace de noms <strong>WordPress<\/strong>.<\/p>\n<p>Dans ce fichier, nous inclurons <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le code suivant<\/a>\u00a0:<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of WordPress Widget Boilerplate\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\n\/**\n * Manages the administrative functionality of the widget.\n *\/\nclass WidgetAdmin extends Widget\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct($widgetSlug)\n    {\n        parent::__construct($widgetSlug);\n    }\n\n    \/**\n     * Displays the administrative view of the form and includes the options\n     * for the instance of the widget as arguments passed into the function.\n     *\n     * @param array $instance the options for the instance of this widget.\n     *\/\n    public function form($instance)\n    {\n        include plugin_dir_path(__FILE__).'Views\/Admin.php';\n    }\n}\n<\/code><\/pre>\n<p>Ensuite, dans le code original d&rsquo;instanciation de notre widget, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous allons changer cette ligne<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new Widget('widget-name'));\n}<\/code><\/pre>\n<p>Pour ressembler <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 \u00e7a<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Registers the core Widget class using the WordPress APIs.\n *\/\npublic function load()\n{\n    register_widget(new WidgetAdmin('widget-name'));\n}<\/code><\/pre>\n<p>Au cours des prochains articles, cela va continuer \u00e0 \u00e9voluer mais, comme vous pouvez le voir, nous nous assurons d&rsquo;avoir une seule classe de fonctionnalit\u00e9s de base pour parler avec WordPress et une classe sp\u00e9cifiquement pour rendre le formulaire administratif.<\/p>\n<h3>L&rsquo;interface utilisateur\u00a0: une deuxi\u00e8me passe<\/h3>\n<p>Enfin, nettoyons le formulaire afin qu&rsquo;il ait un peu plus d&rsquo;exp\u00e9rience utilisateur solide qui s&rsquo;int\u00e8gre bien \u00e0 la zone d&rsquo;administration de WordPress dans son ensemble.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Prenez le code suivant<\/a> :<\/p>\n<pre><code>&lt;input type=\"text\" name=\"widget-title\" value=\"\" \/&gt;\n\n&lt;textarea name=\"widget-content\"&gt;&lt;\/textarea&gt;\n\n&lt;label&gt;\n    &lt;input\n        type=\"checkbox\"\n        value=\"1\"\n        name=\"widget-title-enabled\"\n    \/&gt;\n    Display Title?\n&lt;\/label&gt;<\/code><\/pre>\n<p>Et mettez-le \u00e0 jour pour qu&rsquo;il ressemble <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>&lt;div class=\"widget-content\"&gt;\n    &lt;p&gt;\n        &lt;input\n            type=\"text\"\n            name=\"widget-title\"\n            value=\"\"\n            placeholder=\"Widget Title\"\n            class=\"widefat\"\n        \/&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;textarea\n            name=\"widget-content\"\n            placeholder=\"Widget Content\"\n            style=\"width:100%;\"&gt;&lt;\/textarea&gt;\n    &lt;\/p&gt;\n\n    &lt;p&gt;\n        &lt;input\n            type=\"checkbox\"\n            value=\"1\"\n            name=\"widget-title-enabled\"\n            class=\"checkbox\"\n        \/&gt;\n        &lt;label for=\"widget-title-enabled\"&gt;Display Title?&lt;\/label&gt;\n    &lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- .widget-content --&gt;<\/code><\/pre>\n<p>En supposant que tout s&rsquo;est bien pass\u00e9, vous devriez maintenant voir quelque chose qui ressemble \u00e0 ceci :<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160909-61e71613309d7.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-160909-61e71613309d7.png\" alt=\"Widgets WordPress : refactorisation, partie 9\" ><\/a><\/p>\n<p>Et c&rsquo;est l\u00e0 que nous allons nous arr\u00eater avec les fonctionnalit\u00e9s administratives de ce poste. N&rsquo;oubliez pas que vous pouvez \u00e9galement suivre tout cela dans la branche de d\u00e9veloppement sur GitHub.<\/p>\n<h2>D\u00e9sinfection et s\u00e9rialisation<\/h2>\n<p>Dans le prochain article, nous verrons ce qui est n\u00e9cessaire pour nettoyer et s\u00e9rialiser (ou nettoyer et enregistrer) le contenu de notre widget.<\/p>\n<p>Nous nous assurerons \u00e9galement d&rsquo;afficher les informations dans la zone administrative une fois les informations enregistr\u00e9es et r\u00e9cup\u00e9r\u00e9es.<\/p>\n<p>Enfin, l&rsquo;h\u00e9ritage et la coh\u00e9sion de classe continueront d&rsquo;\u00e9voluer mais, pour l&rsquo;instant, concentrez-vous sur ce qui est couvert dans cet article, puis nous continuerons dans le prochain article.<\/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>Nous voulons nous assurer que nous restons coh\u00e9rents en maintenant un haut niveau de coh\u00e9sion avec nos classes en commen\u00e7ant par l&rsquo;administration des widgets WordPress.<\/p>\n","protected":false},"author":1,"featured_media":234899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717,801],"tags":[1167],"class_list":["post-231288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","category-php-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231288","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=231288"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231288\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}