{"id":231697,"date":"2022-12-22T18:52:00","date_gmt":"2022-12-22T15:52:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231697"},"modified":"2022-12-22T18:56:15","modified_gmt":"2022-12-22T15:56:15","slug":"widget-wordpress-refactoring-parte-13","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/widget-wordpress-refactoring-parte-13\/","title":{"rendered":"Widget WordPress: refactoring, parte 13"},"content":{"rendered":"\n<p>Siamo finalmente al post finale della serie sul refactoring di WordPress Widget Boilerplate. Entro la fine di questo post, avremo completato il ramo di sviluppo del nostro codice e saremo pronti per unire tutto nel ramo principale.<\/p>\n<p>C&#8217;\u00e8 per\u00f2 ancora un po&#8217; di lavoro da fare. <a href=\"https:\/\/wordpress.mediadoma.com\/it\/widget-wordpress-refactoring-parte-12\/\" title=\"Vale a dire\">Vale a dire<\/a> :<\/p>\n<blockquote>\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<\/blockquote>\n<p>Quindi queste sono le due cose che vedremo in questo post. In particolare, esamineremo la gestione della logica condizionale per il front-end e quindi come implementare la memorizzazione nella cache di base.<\/p>\n<h2>The WordPress Widget Boilerplate: Refactoring Parte 13<\/h2>\n<p>Prima di entrare nel round finale di dettagli, voglio assicurarmi di eseguire <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&#8217;ultima versione del codice<\/a> poich\u00e9 questa \u00e8 l&#8217;unica volta in cui credo sia indispensabile avere il codice pronto per l&#8217;ultimo round di modifiche.<\/p>\n<p>Quindi, se non hai il codice in esecuzione sulla tua macchina, ora \u00e8 il momento. L&#8217;ultimo bit di codice su cui dobbiamo lavorare \u00e8 piuttosto piccolo.<\/p>\n<p>Ma \u00e8 importante assicurarsi di eseguire l&#8217;ultima versione. Quindi, una volta che hai eseguito un pull del codice pi\u00f9 recente, siamo pronti per concludere.<\/p>\n<h3>1 Rendering del front-end<\/h3>\n<p>Ricordiamo nel post precedente, abbiamo reso le informazioni generali sui widget \u2013 il titolo, il contenuto e se il titolo dovesse essere visualizzato o meno \u2013 semplicemente visualizzando i valori sul front-end.<\/p>\n<p>Ma ora \u00e8 il momento di impostare le informazioni per assicurarci che non solo renderemo le informazioni in base alle opzioni nell&#8217;area di amministrazione del widget, ma anche se ci sono informazioni.<\/p>\n<p>Quindi inizieremo con l&#8217;opzione pi\u00f9 semplice: l&#8217;opzione che ci consente di alternare se il titolo viene visualizzato. In altre parole, assumeremo se i valori sono popolati e tale opzione \u00e8 selezionata nel back-end.<\/p>\n<p>Ricordiamo, il\u00a0 file <strong>Widget.php<\/strong> attualmente \u00e8 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-00-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">simile a questo<\/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?&gt;\n&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;\n<\/code><\/pre>\n<p>Quindi prima faremo il refactoring di questa parte. Certo, \u00e8 una cosa relativamente facile da introdurre, giusto? Cio\u00e8, la logica va cos\u00ec:<\/p>\n<ul>\n<li>Se l&#8217;opzione per la visualizzazione del titolo \u00e8 selezionata, mostriamo il titolo; altrimenti, non lo facciamo.<\/li>\n<\/ul>\n<p>Questo pu\u00f2 essere affrontato con una semplice\u00a0 istruzione <strong>if<\/strong> valutando il valore\u00a0 dell&#8217;opzione <strong>display-title<\/strong> che abbiamo. A causa del modo in cui abbiamo costruito la funzione in questa serie, se l&#8217;opzione \u00e8 selezionata, allora ha l&#8217;opzione <strong>on<\/strong> ; altrimenti \u00e8 vuoto.<\/p>\n<p>Ci\u00f2 significa che possiamo impostare un condizionale come questo nello stesso codice che abbiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-01-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">condiviso sopra<\/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?&gt;\n&lt;div id=\"&lt;?php echo $args['id']; ?&gt;\"&gt;\n  &lt;?php if (isset($instance['display-title']) &amp;&amp; 'on' === $instance['display-title']): ?&gt;\n        &lt;h3 class=\"widget-title\"&gt;&lt;?php echo $instance['title']; ?&gt;&lt;\/h3&gt;\n    &lt;?php endif; ?&gt;\n    &lt;p&gt;&lt;?php echo $instance['content']; ?&gt;&lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- #&lt;?php echo $args['id']; ?&gt;--&gt;\n<\/code><\/pre>\n<p>In questo modo, se l&#8217;opzione \u00e8 selezionata, verr\u00e0 visualizzato il titolo.<\/p>\n<h3>Un corollario a questo<\/h3>\n<p>Una cosa che penso valga la pena ricordare \u00e8 che ci sono momenti in cui le persone possono attivare i widget ma scegliere di non avere contenuti. Certo, puoi obiettare che se lo fanno, allora \u00e8 colpa loro.<\/p>\n<p>C&#8217;\u00e8 del vero.<\/p>\n<p>Ma penso anche che prendersi cura degli utenti che potrebbero capire le cose o che potrebbero aver fatto accidentalmente qualcosa che non sapevano possa aiutarli. Forse ci rende sviluppatori responsabili (o forse ci rende pi\u00f9 aggressivi \u2013 fai la tua scelta, io sono con il primo).<\/p>\n<p>Quindi, in questo caso, penso che valga la pena assicurarsi che il titolo e il contenuto non siano vuoti. Se lo sono, non eseguire il rendering di nulla.<\/p>\n<p>Il codice quindi si presenta <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-02-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cos\u00ec<\/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?&gt;\n\n&lt;?php if (empty($instance['title']) &amp;&amp; empty($instance['content'])): return;\nendif; ?&gt;\n\n&lt;div id=\"&lt;?php echo $args['id']; ?&gt;\"&gt;\n    &lt;?php if (isset($instance['display-title']) &amp;&amp; 'on' === $instance['display-title']): ?&gt;\n        &lt;h3 class=\"widget-title\"&gt;&lt;?php echo $instance['title']; ?&gt;&lt;\/h3&gt;\n    &lt;?php endif; ?&gt;\n    &lt;p&gt;&lt;?php echo $instance['content']; ?&gt;&lt;\/p&gt;\n&lt;\/div&gt;&lt;!-- #&lt;?php echo $args['id']; ?&gt;--&gt;\n<\/code><\/pre>\n<p>E questo concluder\u00e0 per quanto riguarda il front-end. Ma che dire della memorizzazione nella cache di cui abbiamo parlato in un post precedente?<\/p>\n<h3>2 Introduzione alla memorizzazione nella cache<\/h3>\n<p>La memorizzazione nella cache, per un widget come questo, \u00e8 qualcosa che considero facoltativa, ma poich\u00e9 abbiamo integrato la funzionalit\u00e0 di base in Boilerplate per svuotare la cache, segue logicamente l&#8217;introduzione della funzionalit\u00e0 per la memorizzazione nella cache dei dati, giusto?<\/p>\n<p>Quindi facciamolo. Non dovrebbe essere nemmeno difficile. In realt\u00e0, stiamo semplicemente prendendo il titolo, il contenuto e la casella di controllo e memorizzando nella cache i valori per l&#8217;istanza data del widget.<\/p>\n<p>Per fare ci\u00f2, dobbiamo individuare la funzione <strong>widget<\/strong> e quindi eseguire le seguenti operazioni:<\/p>\n<p>Innanzitutto, introdurremo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-03-cache-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una funzione per memorizzare nella cache il widget<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Caches the values for the instance of this widget.\n *\n * @param array $args     argument provided by WordPress that may be useful in rendering the widget\n * @param array $instance the values of the widget\n *\/\nprivate function cacheWidget($args, $instance)\n{\n    $cache = [];\n    $cache['widget_id'] = $args['widget_id'];\n    $cache['title'] = empty($instance['title'])? '': $instance['title'];\n    $cache['content'] = empty($instance['content'])? '': $instance['content'];\n\n    $instance['display-title'] = isset($instance['display-title'])? $instance['display-title']: '';\n    $cache['display-title'] = $instance['display-title'];\n\n    wp_cache_set($this-&gt;getWidgetSlug(), $cache, 'widget');\n}<\/code><\/pre>\n<p>Quindi introdurremo una funzione per recuperare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-04-get-cached-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la versione memorizzata nella cache del widget<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * @return array the cached instance of this widget if it's not empty\n *\/\nprivate function getCachedWidget()\n{\n    $cache = wp_cache_get($this-&gt;getWidgetSlug(), 'widget');\n    if (!empty($cache)) {\n        return $cache;\n    }\n    return [];\n}<\/code><\/pre>\n<p>Quindi rivisitiamo la funzione originale per assicurarci di visualizzare ci\u00f2 che \u00e8 necessario. Se la cache \u00e8 vuota, non facciamo altro che visualizzare i valori <a href=\"https:\/\/gist.github.com\/tommcfarlin\/2f6bbe19253188596f804a7c211d9cd5#file-05-widget-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cos\u00ec come sono<\/a>.<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Displays the widget based on the contents of the included template.\n *\n * @param array $args     argument provided by WordPress that may be useful in rendering the widget\n * @param array $instance the values of the widget\n *\/\npublic function widget($args, $instance)\n{\n    \/\/ Get a cached version of the widget. If it's empty, cache what we have.\n    $cache = $this-&gt;getCachedWidget();\n    if (empty($cache)) {\n        $this-&gt;cacheWidget($args, $instance);\n    }\n\n    return $this-&gt;widgetDisplay-&gt;show($args, $instance);\n}<\/code><\/pre>\n<p>E questo conclude la funzionalit\u00e0 per Widget Boilerplate completamente rifattorizzato.<\/p>\n<h2>La fine<\/h2>\n<p>Questo particolare grave \u00e8 stato lungo. Personalmente, \u00e8 stato davvero bello rivisitare il WordPress Widget Boilerplate e portarlo a standard pi\u00f9 moderni.<\/p>\n<p>Ci sono ancora alcune cose che devo fare come aggiornare il file README e quindi fornire alcune istruzioni in pi\u00f9 prima di unirlo al\u00a0 ramo <strong>principale<\/strong>, ma se hai seguito l&#8217;intera serie, probabilmente sei a bordo con tutto. Inoltre, apprezzo il tempo che ci hai dedicato e spero che sia stato utile per te su alcuni livelli.<\/p>\n<p>Detto questo, cercher\u00f2 di passare a contenuti premium in forma pi\u00f9 breve poich\u00e9 questa serie e l&#8217;ultima erano piuttosto lunghe. Come al solito, puoi sempre contattarmi o offrire richieste pull secondo necessit\u00e0: \u00e8 open source e accoglie anche miglioramenti.<\/p>\n<p>Per ora, per\u00f2, questo avvolge questa serie.<\/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>Qui, finalizziamo la versione aggiornata di WordPress Widget Boilerplate aggiornando ci\u00f2 che gli utenti vedono sul front-end e lavorando con la memorizzazione nella cache.<\/p>\n","protected":false},"author":1,"featured_media":236089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720,844,865],"tags":[1168],"class_list":["post-231697","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231697","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=231697"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231697\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}