{"id":231496,"date":"2022-12-17T09:26:00","date_gmt":"2022-12-17T06:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231496"},"modified":"2022-12-07T11:44:06","modified_gmt":"2022-12-07T08:44:06","slug":"widget-wordpress-refactoring-parte-5","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/widget-wordpress-refactoring-parte-5\/","title":{"rendered":"Widget WordPress: refactoring, parte 5"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Nel post precedente<\/a><\/strong>, abbiamo creato un Registro che verr\u00e0 utilizzato per memorizzare tutte le varie classi responsabili della funzionalit\u00e0 del nostro widget.<\/p>\n<p>Per fare ci\u00f2, verr\u00e0 introdotta una variet\u00e0 di altre classi, ma prima di andare l\u00ec, dobbiamo aggiungere il Registro di sistema al bootstrap del plug-in (per non parlare di creare un bootstrap per il plug-in).<\/p>\n<p>Nello specifico, ecco da dove ci siamo lasciati:<\/p>\n<blockquote>\n<p>Come accennato in precedenza nel post, dobbiamo aggiungerlo al bootstrap del plugin. Per fare ci\u00f2, per\u00f2, dobbiamo definire il nostro filtro in modo da poter passare facilmente il registro intorno al resto del plugin (quando arriva il momento di farlo).<\/p>\n<\/blockquote>\n<p>Quindi, in questo post, ci concentreremo sul fare esattamente questo.<\/p>\n<h2>The WordPress Widget Boilerplate: Refactoring, Parte 5<\/h2>\n<p>Se hai seguito la serie fino a questo punto, dovresti essere in una buona posizione specificatamente per aggiungere il registro in modo che abbiamo accesso ad esso in tutto il plug-in.<\/p>\n<p>Per fare questo, per\u00f2, presuppone che tu sappia come definire i tuoi filtri. In WordPress, <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">utilizziamo sempre azioni e filtri<\/a>.<\/p>\n<p>La cosa su questi hook \u00e8 che sono gi\u00e0 definiti, per\u00f2. Quindi come definiamo il nostro filtro?<\/p>\n<p>Diamo un&#8217;occhiata a fare esattamente questo.<\/p>\n<h3>1 Definire il nostro filtro<\/h3>\n<p>Innanzitutto, dobbiamo comprendere alcuni concetti:<\/p>\n<ul>\n<li>cos&#8217;\u00e8 un filtro,<\/li>\n<li>come aggiungere un filtro,<\/li>\n<li>come introdurre il nostro registro nel filtro<\/li>\n<li>come recuperare la classe dal filtro.<\/li>\n<\/ul>\n<p>Fortunatamente, tutto quanto sopra \u00e8 facile da spiegare.<\/p>\n<h4>Che cos&#8217;\u00e8 un filtro?<\/h4>\n<p>In poche parole, gli hook ci consentono di chiamare WordPress in momenti specifici durante l&#8217;esecuzione del programma. Le azioni sono solitamente riservate al comportamento; I filtri sono riservati per i dati.<\/p>\n<p>Inoltre, i filtri ci consentono di lavorare con dati specifici nell&#8217;applicazione: possono essere dati preesistenti o anche nuovi. E nel nostro caso, sar\u00e0 la classe Registry che contiene riferimenti ad altri dati.<\/p>\n<h4>Aggiunta di un filtro<\/h4>\n<p>Aggiungere un filtro \u00e8 facile. Ha tre parti:<\/p>\n<ol>\n<li>chiamando <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_filter<\/a> ,<\/li>\n<li>definire un identificatore univoco per il filtro,<\/li>\n<li>passando informazioni nel filtro che possono essere restituite ogni volta che viene chiamato.<\/li>\n<\/ol>\n<p>Per noi, identificher\u00f2 il nostro registro come filtro <strong>wpWidgetRegistry<\/strong>. Nota, tuttavia, che \u00e8 importante scegliere un nome univoco per la tua implementazione perch\u00e9, in caso contrario, potresti finire con collisioni con altri dati se un altro plug-in utilizza lo stesso identificato.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc432bb7.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-161108-61e71bc432bb7.png\" alt=\"Widget WordPress: refactoring, parte 5\" ><\/a><\/p>\n<p>Ad ogni modo, l&#8217;aggiunta di un filtro esegue un compito semplice:<\/p>\n<blockquote>\n<p>Agganciare una funzione o un metodo a un&#8217;azione filtro specifica.<\/p>\n<\/blockquote>\n<p>Quindi questo significa che dobbiamo definire un metodo con il nostro ID. A causa della natura di PHP, non \u00e8 necessario utilizzare una funzione separata.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc81c90d.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-161108-61e71bc81c90d.png\" alt=\"Widget WordPress: refactoring, parte 5\" ><\/a><\/p>\n<p>Invece, possiamo usare <a href=\"https:\/\/secure.php.net\/manual\/en\/functions.anonymous.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una funzione anonima<\/a>.<\/p>\n<blockquote>\n<p>Le funzioni anonime, note anche come chiusure, consentono la creazione di funzioni che non hanno un nome specificato. Sono molto utili come valore dei parametri di callback, ma hanno molti altri usi.<\/p>\n<\/blockquote>\n<p>La funzione anonima che andremo a definire accetter\u00e0 un riferimento al plugin come argomento e quindi lo restituir\u00e0 ogni volta che verr\u00e0 chiamato il filtro (che verr\u00e0 mostrato pi\u00f9 avanti in questo articolo).<\/p>\n<h4>Passare le informazioni al nostro filtro<\/h4>\n<p>Ora che abbiamo coperto tutto ci\u00f2, possiamo eseguire il processo di creazione di un&#8217;istanza del nostro registro, definizione di un filtro e quindi aggiunta del registro, in modo che sia accessibile in tutta l&#8217;applicazione.<\/p>\n<p>Quindi all&#8217;interno del file principale del plugin, che \u00e8 il file <strong>wordpress-widget-boilerplate.php<\/strong>, aggiungiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-00-bootstrap-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le seguenti righe di codice<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplate;\n\nuse WordPressWidgetBoilerplateUtilitiesRegistry;\n\n\/\/ More to come...\n<\/code><\/pre>\n<p>Quanto sopra dichiara lo spazio dei nomi in cui risiede il Registro. Quindi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-01-bootstrap-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aggiungiamo il seguente blocco di codice sotto il caricatore automatico:<\/a><\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup a filter so we can retrieve the registry throughout the plugin.\n$registry = new Registry();\nadd_filter('wpWidgetRegistry', function() use ($registry) {\n    return $registry;\n});\n<\/code><\/pre>\n<p>Nota che quando miri ad attivare il plug-in, non si attiver\u00e0 e generer\u00e0 un errore. Ci\u00f2 \u00e8 dovuto alla mancanza di un caricatore automatico di cui parleremo nel prossimo post.<\/p>\n<h3>2 Recupero del nostro registro<\/h3>\n<p>Poich\u00e9 il registro \u00e8 definito nel bootstrap del plug-in e ci\u00f2 avviene tramite l&#8217;uso di un filtro, possiamo accedere al registro in qualsiasi punto del nostro plug-in chiamando il nostro filtro personalizzato.<\/p>\n<p>Ad esempio, diciamo che siamo in un&#8217;altra classe e abbiamo bisogno di ottenere un riferimento al registro. Per fare ci\u00f2, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-02-retrieve-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">possiamo effettuare questa chiamata<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Retrieve the registry anywhere in the plugin.\n$registry = apply_filters('wpWidgetRegistry', null);\n<\/code><\/pre>\n<p>E questo \u00e8 tutto. Facile, vero? Finch\u00e9 tutto \u00e8 stato aggiunto correttamente al registro, che sar\u00e0 presto trattato, saremo in grado di accedervi tutti tramite gli identificatori univoci che abbiamo utilizzato nel <a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post precedente.<\/a><\/p>\n<h2>Il caricatore automatico<\/h2>\n<p>Ora stiamo iniziando a usare gli spazi dei nomi e ad usare altre classi. Ci\u00f2 significa che dovremo utilizzare i caricatori automatici.<\/p>\n<p>Quindi, prima di passare al refactoring dell&#8217;intera classe cos\u00ec com&#8217;\u00e8 in questo momento, faremo una piccola deviazione in alcune delle funzionalit\u00e0 di Composer per vedere come viene utilizzato per generare un caricatore automatico (oltre alle cose che abbiamo gi\u00e0 usandolo per gestire la qualit\u00e0 del nostro codice sorgente).<\/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>Una volta che abbiamo un registro, dobbiamo essere in grado di accedervi attraverso il nostro plugin e lo facciamo con hook personalizzati.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,720,865],"tags":[1168],"class_list":["post-231496","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231496","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=231496"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231496\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}