{"id":233926,"date":"2023-02-24T13:51:00","date_gmt":"2023-02-24T10:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233926"},"modified":"2022-11-11T13:14:05","modified_gmt":"2022-11-11T10:14:05","slug":"crea-un-blocco-gutenberg-personalizzato-parte-3-oggetti-di-scena-e-componenti-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/crea-un-blocco-gutenberg-personalizzato-parte-3-oggetti-di-scena-e-componenti-di-wordpress\/","title":{"rendered":"Crea un blocco Gutenberg personalizzato &#8211; Parte 3: oggetti di scena e componenti di WordPress"},"content":{"rendered":"\n<p>Il <a href=\"https:\/\/awhitepixel.com\/blog\/wordpress-gutenberg-create-custom-blocks-part-2-register-block\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">passaggio precedente<\/a> di questa serie di tutorial ha spiegato come registrare un blocco personalizzato, sia in Javascript che in PHP. In questo passaggio impareremo come utilizzare i componenti di WordPress per aggiungere diversi tipi di campi e impostazioni.<\/p>\n<p>Per utilizzare i componenti di WordPress nel nostro blocco, dobbiamo prima conoscere gli oggetti di scena.<\/p>\n<h2>Puntelli<\/h2>\n<p>Props \u00e8 una caratteristica importante in React ed \u00e8 fondamentalmente un modo per passare variabili o funzioni ad altri componenti. Se non hai familiarit\u00e0 con gli oggetti di scena di React, puoi leggere <a href=\"https:\/\/reactjs.org\/docs\/components-and-props.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il tutorial ufficiale di React a<\/a> riguardo.<\/p>\n<p>WordPress fornisce alcuni oggetti di scena per le funzioni <code>edit<\/code>e in. All&#8217;interno di questi oggetti di scena otteniamo accesso a cose critiche, come attributi e un metodo per aggiornare i nostri attributi. Esamineremo gli attributi in dettaglio nel <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-gutenberg-blocks-part-4-attributes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">passaggio successivo<\/a>! <code>save``registerBlockType()<\/code><a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-gutenberg-blocks-part-4-attributes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<p>Finora nel nostro blocco abbiamo scritto la funzione per <code>edit<\/code>e in <code>save<\/code>questo modo:<\/p>\n<pre><code>edit:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},<\/code><\/pre>\n<p>Dovresti abituarti ad aggiungere il parametro <code>props<\/code>a entrambi <code>edit<\/code>e <code>save<\/code>, in questo modo:<\/p>\n<pre><code>edit: (props) =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},<\/code><\/pre>\n<p>Ora hai pieno accesso alla variabile <code>props<\/code>e a tutto ci\u00f2 che contiene dall&#8217;interno <code>edit<\/code>e <code>save<\/code>. Se sei curioso, puoi aggiungere a <code>console.log(props);<\/code>nella <code>edit<\/code>funzione prima <code>return<\/code>dell&#8217;istruzione. Dovresti vedere quali oggetti di scena sono disponibili nel debugger della console.<\/p>\n<h2>Utilizzo dei componenti di WordPress<\/h2>\n<p>Come accennato in precedenza, abbiamo accesso a un&#8217;enorme libreria di componenti e funzioni utili all&#8217;interno del pacchetto globale <code>wp<\/code>. Troverai componenti pronti per l&#8217;uso per qualsiasi tipo di componente relativo all&#8217;input che ti viene in mente. Gli esempi includono input di testo, input di testo RTF, menu a discesa, interruttori, caselle di controllo, pulsanti in stili diversi, caricatore multimediale e selettori di colori. Ci sono anche funzioni e componenti per funzionalit\u00e0 pi\u00f9 avanzate. Ad esempio, eseguire query su WordPress per i contenuti (post, categorie, ecc.) con funzioni integrate o recuperare con l&#8217;API REST.<\/p>\n<p>\u00c8 sia pi\u00f9 semplice che consigliato utilizzare i componenti dell&#8217;interfaccia utente di WordPress. Questo per assicurarsi che il design e la funzionalit\u00e0 siano il pi\u00f9 snelli possibile per non confondere o infastidire gli utenti.<\/p>\n<p>Ma sfortunatamente al momento in cui scrivo la documentazione per Gutenberg \u00e8 molto scarsa. Ho trovato il modo migliore per conoscere ci\u00f2 che esiste all&#8217;interno del <code>wp<\/code>pacchetto e come funzionano i componenti effettivamente cercando nel loro <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository Github Gutenberg<\/a> ufficiale. Alcuni dei pacchetti (cartelle) hanno un testo readme che offre un po&#8217; di documentazione. Dai un&#8217;occhiata al readme per un <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\/button\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pulsante<\/a> o per l&#8217; <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\/toggle-control\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">interruttore<\/a>, ad esempio.<\/p>\n<p>Il repository Github dovrebbe corrispondere a ci\u00f2 che \u00e8 all&#8217;interno del <code>wp<\/code>pacchetto (a seconda della versione che hai e del ramo che stai guardando in Github). Ci\u00f2 significa che ogni cartella che vedi nella directory principale in Github risiede nel pacchetto <code>packages<\/code>globale. <code>wp<\/code>Ad esempio, ricorda che la funzione che abbiamo usato nel passaggio precedente, <code>registerBlockType()<\/code>, era inside <code>wp.blocks<\/code>, il che significa che troverai il codice sorgente per questa funzione esportato all&#8217;interno di <code>packages\/blocks\/<\/code>.<\/p>\n<p>Poich\u00e9 ho sviluppato una serie di blocchi Gutenberg personalizzati e ho approfondito un po&#8217; il repository Github, ho scoperto che ci sono alcuni pacchetti che contengono le funzionalit\u00e0 pi\u00f9 comuni utilizzate per la creazione di blocchi personalizzati. Li includer\u00f2 di seguito.<\/p>\n<p>Per una panoramica pi\u00f9 completa dei componenti disponibili, consiglio di scaricare il mio eBook gratuito che copre i componenti disponibili in Gutenberg! Contiene i componenti pi\u00f9 comuni e utili con documentazione su prop ed esempi di codice:<\/p>\n<h3>Una rapida panoramica dei pacchetti pi\u00f9 comuni che utilizzerai per i blocchi<\/h3>\n<p>Ovviamente ce ne sono molti di pi\u00f9 disponibili, ma quello che segue \u00e8 quello pi\u00f9 comune per lo sviluppo di blocchi. Utilizzeremo la maggior parte, se non tutti, di questi in questa serie di tutorial. Ogni volta che si desidera utilizzare un componente, \u00e8 necessario sapere in quale pacchetto si trova.<\/p>\n<h4>wp.components<\/h4>\n<p>Troverai la maggior parte dei componenti di input dell&#8217;interfaccia utente all&#8217;interno di <code>wp.components<\/code>. Esempi sono input di testo diversi, select, checkbox, pulsanti di opzione, componenti trascinabili, pulsanti, colorpicker, datepicker e cos\u00ec via. Troverai anche componenti dell&#8217;interfaccia utente che puoi utilizzare per la barra degli strumenti del blocco e il contenuto della barra laterale delle impostazioni (denominata InspectorControls) nell&#8217;editor.<\/p>\n<p>Controlla le cartelle nel <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/components\/src\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository Github<\/a>.<\/p>\n<h4>wp.blockEditor e wp.editor<\/h4>\n<p>In questi due pacchetti troverai componenti utili per RTF, gestione di immagini\/caricatore multimediale e componenti per l&#8217;aggiunta effettiva di barre degli strumenti o pannelli Inspector (barra laterale) personalizzati.<\/p>\n<p>Alla fine di questa serie esamineremo la creazione di blocchi dinamici in cui utilizzeremo PHP per il rendering dell&#8217;output del blocco e per questo utilizzeremo un componente da <code>wp.editor<\/code>.<\/p>\n<p>A quanto ho capito, la maggior parte dei componenti \u00e8 iniziata nei <code>wp.editor<\/code>primi giorni di Gutenberg, ma soprattutto dopo WordPress 5.3, molti di essi sono stati spostati in <code>wp.blockEditor<\/code>. Se utilizzi un componente in <code>wp.editor<\/code>cui WordPress prevede di trasferirsi in <code>wp.blockEditor<\/code>esso non fallir\u00e0 per ora, ma nel debugger della console riceverai avvisi che \u00e8 stato deprecato e che dovresti passare <code>wp.blockEditor<\/code>quando puoi. E in modo reversibile, se stai seguendo questa serie con una versione precedente di WordPress per qualche motivo, potresti riscontrare errori durante la chiamata di componenti che non sono <code>wp.blockEditor<\/code>ancora stati spostati.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf23c1355.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-151760-61e4cf23c1355.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 3: oggetti di scena e componenti di WordPress\" ><\/a><\/p>\n<h4>elemento.wp<\/h4>\n<p>All&#8217;interno <code>wp.element<\/code>troverai componenti che corrispondono ai componenti React. Ad esempio <code>Component<\/code>(che corrisponde a <code>React.Component<\/code>) e <code>Fragment<\/code>( <code>React.Fragment<\/code>). Li useremo quando inizieremo a dividere il nostro codice in componenti separati.<\/p>\n<h4>wp.i18n<\/h4>\n<p>Come dice il nome, il <code>wp.i18n<\/code>pacchetto contiene funzioni per la gestione della traduzione. Contiene le stesse funzioni di traduzione che conosciamo in PHP; per esempio <code>__()<\/code>e <code>_e()<\/code>. Lo esamineremo in dettaglio in &lt;&lt;&lt;&gt;&gt;&gt;&gt; quando impareremo come tradurre il nostro blocco.<\/p>\n<h4>wp.data<\/h4>\n<p>Il <code>wp.data<\/code>pacchetto serve per interrogare WordPress per i dati al di fuori dell&#8217;editor. Ci sono componenti per l&#8217;invio dei messaggi <code>withSelect<\/code>e <code>select<\/code>che useremo pi\u00f9 avanti in questa serie per interrogare i post all&#8217;interno del nostro blocco.<\/p>\n<h4>wp.compose<\/h4>\n<p>Il pacchetto precedente e <code>wp.compose<\/code>sono per la costruzione di blocchi pi\u00f9 avanzati. All&#8217;interno di questo pacchetto troveremo componenti e funzioni per creare i cosiddetti componenti di ordine superiore. <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">I componenti di ordine superiore<\/a> sono una tecnica di pattern in React per il riutilizzo di componenti e logica, e la useremo in combinazione con <code>wp.data<\/code>per interrogare i post.<\/p>\n<h2>Basta parlare: come usi in pratica alcuni di questi componenti?<\/h2>\n<p>Come menzionato prima; per utilizzare i componenti di WordPress devi sapere dove si trovano. Spero che la mia panoramica sopra combinata con il <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository Github<\/a> ti dia un&#8217;idea di dove trovarli.<\/p>\n<p>Non dimenticare che puoi sempre aggiungere qualsiasi normale tag HTML, come div, span, intestazioni e cos\u00ec via. Ricorda solo di seguire <a href=\"https:\/\/reactjs.org\/docs\/dom-elements.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le linee guida di React<\/a> negli attributi. Ad esempio <code>class<\/code>\u00e8 una parola chiave riservata in React (per la creazione di componenti basati su classi), quindi se vuoi aggiungere una classe a un elemento HTML devi usare <code>className<\/code>.<\/p>\n<p>Nota: durante lo sviluppo, non dimenticare di iniziare <code>npm run start<\/code>a compilare il codice.<\/p>\n<p>Come semplice esempio, proviamo alcuni componenti per vedere come appaiono. Li destrutturiamo dai loro pacchetti corrispondenti e li usiamo nella nostra <code>edit<\/code>funzione.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText } = wp.blockEditor;\nconst { TextControl, TextareaControl } = wp.components;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    ...\n    edit: (props) =&gt; { \n        return (&lt;div&gt;\n                Text input:\n                &lt;TextControl \/&gt; \n                Textarea:\n                &lt;TextareaControl \/&gt;\n                Richtext:\n                &lt;RichText \/&gt;\n            &lt;\/div&gt;\n        );\n    },\n    ...\n});<\/code><\/pre>\n<p>Questo, ad esempio, risulter\u00e0 nel nostro blocco simile a questo nell&#8217;editor.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151760-61e4cf248ce0b.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-151760-61e4cf248ce0b.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 3: oggetti di scena e componenti di WordPress\" ><\/a><\/p>\n<p>Noterai che riceverai messaggi di errore in Console quando li digiti e che non salver\u00e0 ci\u00f2 che digiti durante l&#8217;aggiornamento del post (e l&#8217;aggiornamento). Questo perch\u00e9 ci mancano gli oggetti di scena sui componenti che sono la connessione agli attributi, dove sono archiviati tutti i nostri dati di blocco. Gli oggetti di scena sono responsabili del passaggio dei valori salvati e delle funzioni responsabili dell&#8217;aggiornamento dei nostri attributi quando qualcosa viene modificato nei nostri input. Questo \u00e8 ci\u00f2 che faremo nel passaggio successivo, dove inizieremo finalmente a scrivere del codice reale.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel passaggio precedente abbiamo registrato un blocco Gutenberg personalizzato. In questo passaggio impareremo come utilizzare i componenti di WordPress per aggiungere diversi tipi di impostazioni.<\/p>\n","protected":false},"author":1,"featured_media":151761,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,896,720,939,939,1110,814,814,720,844,844,865,865],"tags":[1168],"class_list":["post-233926","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-gutenberg-6","category-n-a","category-plugin-2","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233926","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=233926"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233926\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151761"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}