{"id":231578,"date":"2022-12-19T10:53:00","date_gmt":"2022-12-19T07:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231578"},"modified":"2022-12-07T10:03:10","modified_gmt":"2022-12-07T07:03:10","slug":"widget-wordpress-refactoring-parte-9","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/widget-wordpress-refactoring-parte-9\/","title":{"rendered":"Widget WordPress: refactoring, parte 9"},"content":{"rendered":"\n<p>Sebbene l&#8217;ultimo post di questa serie di refactoring non sia stato incredibilmente lungo, penso che sia stato un po&#8217; denso. Cio\u00e8, ha richiesto una discreta quantit\u00e0 di lavoro per ottenere il codice in un posto in cui possiamo lavorarci pi\u00f9 facilmente.<\/p>\n<p>Ma questo \u00e8 tutto: tutto il lavoro che abbiamo fatto dovrebbe rendere pi\u00f9 facile andare avanti con il resto del codice che dobbiamo scrivere.<\/p>\n<p>E per assicurarci di sfruttare il lavoro e le basi che abbiamo gettato finora, completeremo la serie con una serie di articoli pi\u00f9 brevi e mirati che dovrebbero richiedere meno tempo per essere letti, implementati e capire cosa stiamo facendo con il codice.<\/p>\n<h2>The WordPress Widget Boilerplate: Refactoring Parte 9<\/h2>\n<p>Richiamo dall&#8217;ultimo post:<\/p>\n<blockquote>\n<p>Successivamente, continueremo a creare funzionalit\u00e0 per l&#8217;area amministrativa del widget. Successivamente, rivolgeremo la nostra attenzione al lato pubblico del widget e alla funzionalit\u00e0 di serializzazione.<\/p>\n<\/blockquote>\n<p>E questo ci prepara esattamente a dove siamo diretti in questo particolare post. Vale a dire, scriveremo un front-end amministrativo che ci consentir\u00e0 di:<\/p>\n<ul>\n<li>definire un titolo per il widget,<\/li>\n<li>definire il contenuto di testo per il widget,<\/li>\n<li>e alternare se vogliamo o meno mostrare il titolo.<\/li>\n<\/ul>\n<p>Non \u00e8 pensato per essere innovativo n\u00e9 \u00e8 pensato per essere il tipo di widget che chiunque altro potrebbe voler vendere. Invece, ha lo scopo di mostrare come possiamo prendere ci\u00f2 che abbiamo per creare qualcosa di simile a ci\u00f2 che abbiamo gi\u00e0 visto in WordPress e come impieghiamo solide pratiche di programmazione.<\/p>\n<h3>L&#8217;interfaccia utente: un primo passaggio<\/h3>\n<p>Dopo il nostro lavoro l&#8217;ultima volta, abbiamo un widget che appare nell&#8217;area amministrativa di WordPress e pu\u00f2 anche essere spostato in una barra laterale o in un&#8217;altra area con widget; tuttavia, in realt\u00e0 non fa nulla.<\/p>\n<p>Per ora, andiamo avanti e aggiungiamo tre elementi all&#8217;interfaccia utente:<\/p>\n<ol>\n<li>aggiungere un input di testo per il titolo del widget,<\/li>\n<li>includere un elemento textarea per visualizzare quello che potrebbe essere un paragrafo di testo,<\/li>\n<li>e infine, aggiungi una casella di controllo per alternare le informazioni sul titolo.<\/li>\n<\/ol>\n<p>Per fare ci\u00f2, dovremo modificare un file nella\u00a0 directory <strong>Views<\/strong>. Vale a dire, aggiorneremo il\u00a0 file <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\">Inizieremo con gli elementi<\/a> esattamente come necessario senza markup estraneo.<\/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>Non servir\u00e0 ancora molto da guardare sul front-end, ma ci sta avvicinando a dove vogliamo essere.<\/p>\n<h3>Una classe per gli amministratori<\/h3>\n<p>Successivamente, vogliamo assicurarci di rimanere coerenti con il mantenimento di un alto livello di coesione con le nostre classi. Ci\u00f2 significa che non abbiamo bisogno di una singola classe per fare tutto per l&#8217;amministrazione, la visualizzazione e tutto il resto del lavoro richiesto dall&#8217;API di WordPress.<\/p>\n<p>A tal fine, creeremo una seconda classe chiamata <strong>WidgetAdmin<\/strong> nella\u00a0 directory e nello spazio dei nomi di <strong>WordPress<\/strong>.<\/p>\n<p>In questo file, includeremo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-01-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il seguente codice<\/a> :<\/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>Quindi, nel codice originale per creare un&#8217;istanza del nostro widget, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cambieremo questa riga<\/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>Per assomigliare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/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>Nei prossimi articoli, questo continuer\u00e0 ad evolversi ma, come puoi vedere, ci stiamo assicurando di avere un&#8217;unica classe base di funzionalit\u00e0 per parlare con WordPress e una classe specifica per il rendering del modulo amministrativo.<\/p>\n<h3>L&#8217;interfaccia utente: un secondo passaggio<\/h3>\n<p>Infine, ripuliamo il modulo in modo che abbia un po&#8217; pi\u00f9 di solida UX che si integra bene con l&#8217;area di amministrazione di WordPress nel suo insieme.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-00-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Prendi il seguente codice<\/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>E aggiornalo in modo che assomigli <a href=\"https:\/\/gist.github.com\/tommcfarlin\/499008d8b1c322d58ad7dbc599f81665#file-04-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/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>Supponendo che tutto sia andato bene, ora dovresti vedere qualcosa che assomiglia a questo:<\/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=\"Widget WordPress: refactoring, parte 9\" ><\/a><\/p>\n<p>Ed \u00e8 qui che ci fermeremo con le funzionalit\u00e0 amministrative per questo post. Ricorda che puoi anche tenere traccia di tutto questo nel ramo di sviluppo su GitHub.<\/p>\n<h2>Sanificazione e serializzazione<\/h2>\n<p>Nel prossimo post, vedremo cosa \u00e8 necessario per sanificare e serializzare (o pulire e salvare) il contenuto del nostro widget.<\/p>\n<p>Ci assicureremo inoltre di visualizzare le informazioni nell&#8217;area amministrativa dopo che le informazioni sono state salvate e recuperate.<\/p>\n<p>Infine, l&#8217;eredit\u00e0 e la coesione di classe continueranno ad evolversi ma, per ora, concentrati su ci\u00f2 che \u00e8 trattato in questo post e poi continueremo nel prossimo articolo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vogliamo assicurarci di rimanere coerenti con il mantenimento di un alto livello di coesione con le nostre classi a partire dall&#8217;amministrazione dei widget di 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":[804,720],"tags":[1168],"class_list":["post-231578","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-6","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231578"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231578\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/234899"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}