{"id":231632,"date":"2022-12-20T18:02:00","date_gmt":"2022-12-20T15:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231632"},"modified":"2022-12-07T10:15:42","modified_gmt":"2022-12-07T07:15:42","slug":"widget-wordpress-refactoring-parte-12","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/widget-wordpress-refactoring-parte-12\/","title":{"rendered":"Widget WordPress: refactoring, parte 12"},"content":{"rendered":"\n<p>Per quanto riguarda il refactoring del Widget Boilerplate di WordPress, soprattutto considerando quanto siamo arrivati \u200b\u200blontano da quando il progetto \u00e8 iniziato otto anni fa, abbiamo lavorato molto.<\/p>\n<p>L&#8217;abbiamo portato a uno standard molto pi\u00f9 moderno e stiamo rendendo molto pi\u00f9 semplice lavorare con esso in modo tale che la creazione di widget futuri dovrebbe essere pi\u00f9 semplice. E questo non deriva solo dallo standard del boilerplate, ma da uno standard orientato agli oggetti in modo che la manutenzione e la qualit\u00e0 del codice siano pi\u00f9 elevate.<\/p>\n<p>Nell&#8217;ultimo post, abbiamo concluso gran parte del lavoro per l&#8217;area di amministrazione e siamo pronti per iniziare il nostro lavoro sul codice per il front-end.<\/p>\n<p>Noi abbiamo detto:<\/p>\n<blockquote>\n<p>Successivamente, esamineremo il rendering dei contenuti sul front-end. Ci stiamo avvicinando alla fine, del refactoring di Boilerplate, ma c&#8217;\u00e8 solo un po&#8217; di pi\u00f9 da fare prima di essere pronti per unirlo al ramo principale della codebase.<\/p>\n<\/blockquote>\n<p>Quindi, in questo post, riprenderemo da l\u00ec. Ora, se hai seguito fino a questo punto, dovresti avere tutto ci\u00f2 di cui hai bisogno dal ramo di sviluppo.<\/p>\n<p>In caso contrario, assicurati di tirarlo perch\u00e9 \u00e8 l\u00ec che riprenderemo nel resto del post.<\/p>\n<h2>The WordPress Widget Boilerplate: Refactoring Parte 12<\/h2>\n<p>Ora, quando si tratta di front-end, \u00e8 facile pensare al front-end come a qualsiasi cosa l&#8217;utente veda davanti a s\u00e9, indipendentemente dal fatto che si trovi nell&#8217;area amministrativa o meno.<\/p>\n<p>Tuttavia, questa serie \u00e8 stata chiara sul fatto che stiamo dividendo ci\u00f2 che l&#8217;utente vede tra l&#8217;area amministrativa e l&#8217;area pubblica del sito.<\/p>\n<p>Quindi quello che faremo \u00e8 lavorare sull&#8217;area del codice che rende le informazioni per l&#8217;utente nell&#8217;area pubblica del sito. Inizieremo semplicemente leggendo le informazioni e visualizzandole.<\/p>\n<p>Quindi nel prossimo post, esamineremo il lavoro con la logica condizionale per quanto riguarda alcune delle opzioni per vedere se c&#8217;\u00e8 qualcosa che dobbiamo fare.<\/p>\n<p>Detto questo, entriamo nel codice.<\/p>\n<h3>Sui dati che mostreremo<\/h3>\n<p>Ricorda, il widget, a questo punto, ha tre cose che influenzano la sua visualizzazione:<\/p>\n<ol>\n<li>il titolo del widget,<\/li>\n<li>il contenuto del widget,<\/li>\n<li>un interruttore per decidere se visualizzare o meno il titolo<\/li>\n<\/ol>\n<p>La terza opzione consiste principalmente nel mostrare come utilizzare un diverso tipo di elemento. Perch\u00e9, tecnicamente, se non volessimo mostrare il titolo del widget, non inseriremmo nulla nel widget.<\/p>\n<p>Ma penso che aiuti a mostrare come utilizzare diversi tipi di elementi e i loro valori in modo pratico (o semi-pratico).<\/p>\n<p>Ad ogni modo, detto questo, sappiamo che per ogni data istanza del widget, i dati vengono archiviati con il <strong>titolo<\/strong> ,\u00a0 il <strong>contenuto<\/strong> e\u00a0 il nome <strong>del titolo visualizzato<\/strong> e gli ID forniti da WordPress.<\/p>\n<p>Pertanto, utilizzeremo quelli nel nostro codice front-end per visualizzare i valori.<\/p>\n<h3>Preparazione delle funzioni di visualizzazione<\/h3>\n<p>In genere, la\u00a0 funzione <strong>widget<\/strong> \u00e8 responsabile della visualizzazione dell&#8217;output del widget. Ma una delle cose che abbiamo cercato di fare \u00e8 separare le preoccupazioni del nostro widget in un insieme pi\u00f9 mirato di classi e funzioni.<\/p>\n<p>La prima cosa che vogliamo fare \u00e8 scrivere una\u00a0 classe <strong>WidgetDisplay<\/strong> che si occuper\u00e0, come \u00e8 sicuramente evidente, di visualizzare il contenuto del widget.<\/p>\n<p>Per ora, questo includer\u00e0 incondizionatamente il titolo, il contenuto e il valore di includere o meno il titolo. WordPress rende disponibili anche alcuni contenuti come il markup che dovrebbero apparire prima del widget e dopo il widget, quindi ci assicureremo di includere anche quello.<\/p>\n<p>Ma prima, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-00-widget-display-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">interrompiamo la classe<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplateWordPress;\n\nclass WidgetDisplay\n{\n  private $widgetSlug;\n\n  public function __construct(string $widgetSlug)\n  {\n      $this-&gt;widgetSlug = $widgetSlug;\n  }\n\n  public function show($args, $instance)\n  {\n    \/\/ More to come\n  }\n}\n<\/code><\/pre>\n<p>Dopodich\u00e9, dobbiamo assicurarci di scriverlo anche per le altre classi. Innanzitutto, ci assicureremo di includerlo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-01-widget-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nella nostra classe Widget<\/a> :<\/p>\n<pre><code>&lt;?php\npublic function widget($args, $instance)\n{\n    return $this-&gt;widgetDisplay-&gt;show($args, $instance);\n}<\/code><\/pre>\n<p>E poi lo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-02-widget-admin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungeremo alla classe WidgetAdmin<\/a> (poich\u00e9 \u00e8 qui che risiedono le funzioni principali dell&#8217;API Widget &#8211; delega semplicemente la responsabilit\u00e0 alla classe corretta):<\/p>\n<pre><code>&lt;?php\n\npublic function __construct($widgetSlug)\n{\n    parent::__construct($widgetSlug);\n    $this-&gt;widgetSerializer = new WidgetSerializer($this-&gt;getWidgetSlug());\n    $this-&gt;widgetDisplay = new WidgetDisplay($this-&gt;getWidgetSlug());\n}<\/code><\/pre>\n<p>A questo punto, non stiamo ancora visualizzando nulla. Siamo vicini e su questo ci concentreremo presto.<\/p>\n<h3>Visualizzazione dei dati<\/h3>\n<p>Supponendo che tu sia in grado di aggiungere il codice sopra senza errori, \u00e8 ora di visualizzare il contenuto del widget.<\/p>\n<p>Possiamo farlo in molti modi, da un semplice <strong>var_dump<\/strong> a lavorare effettivamente per visualizzare il contenuto in un modo pi\u00f9 intuitivo. E io sono molto pi\u00f9 un fan di quest&#8217;ultimo.<\/p>\n<p>Quindi facciamolo.<\/p>\n<p>Nella\u00a0 funzione <strong>show<\/strong> della tua\u00a0 classe <strong>WidgetDisplay<\/strong>, aggiungi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-04-widget-display-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il codice seguente<\/a> :<\/p>\n<pre><code>&lt;?php\npublic function show($args, $instance)\n{\n    include_once 'Views\/Widget.php';\n}<\/code><\/pre>\n<p>E quindi la vista per il modello pu\u00f2 essere semplice <a href=\"https:\/\/gist.github.com\/tommcfarlin\/caf46620cf110e5d55f4a302f1d5a471#file-03-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come questa<\/a> :<\/p>\n<pre><code>&lt;div id=\"&lt;?php echo $args['id']; ?&gt;\"&gt;\n    &lt;h3 class=\"widget-title\"&gt;&lt;?php echo $instance['title']; ?&gt;&lt;\/h3&gt;\n    &lt;p&gt;&lt;?php echo $instance['content']; ?&gt;&lt;\/p&gt;\n    &lt;pre&gt;&lt;?php echo $instance['display-title']; ?&gt;&lt;\/pre&gt;\n&lt;\/div&gt;&lt;!-- #&lt;?php echo $args['id']; ?&gt;--&gt;<\/code><\/pre>\n<p>Ci\u00f2 assicurer\u00e0 che il markup corretto per tutto il contenuto prima del widget, il contenuto del widget e il contenuto siano visualizzati correttamente.<\/p>\n<p>Ancora una volta, ricorda che stiamo visualizzando alcuni contenuti che non saranno nella versione finale di questo, ma ci stiamo avvicinando e ne parleremo nel prossimo post.<\/p>\n<p>Consiglierei di giocare con l&#8217;\u00a0 opzione <strong>Visualizza titolo<\/strong> per vedere come viene visualizzato sul front-end dato il markup che abbiamo fornito.<\/p>\n<p>Per ora, l&#8217;output del widget dovrebbe assomigliare a questo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160763-61e7125f80aab.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-160763-61e7125f80aab.png\" alt=\"Widget WordPress: refactoring, parte 12\" ><\/a><\/p>\n<p>Ma questo \u00e8 tutto quello che c&#8217;\u00e8 da coprire in questo post.<\/p>\n<h2>Nel Refactor finale<\/h2>\n<p>L&#8217;ultima cosa che esamineremo dopo questo \u00e8 il rafforzamento di parte della logica condizionale insieme a una parola sulla memorizzazione nella cache dei dati (dal momento che ne stiamo gi\u00e0 facendo un po&#8217; nei post precedenti).<\/p>\n<p>Per ora, per\u00f2, sentiti libero di giocare con ci\u00f2 che abbiamo qui insieme al codice che non abbiamo incluso (come ci\u00f2 che pu\u00f2 essere visualizzato prima o dopo il widget.<\/p>\n<p>Sono stati deliberatamente esclusi da questo esempio, ma potrebbero non essere sempre esclusi a seconda del lavoro che stai facendo.<\/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>Lavoreremo sull&#8217;area del codice che rende le informazioni per l&#8217;utente nell&#8217;area pubblica del sito.<\/p>\n","protected":false},"author":1,"featured_media":234983,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[720,844,865],"tags":[1168],"class_list":["post-231632","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231632","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=231632"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/234983"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}