{"id":233867,"date":"2023-02-23T13:58:00","date_gmt":"2023-02-23T10:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233867"},"modified":"2022-11-11T12:53:12","modified_gmt":"2022-11-11T09:53:12","slug":"crea-un-blocco-gutenberg-personalizzato-parte-2-registra-blocco","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/crea-un-blocco-gutenberg-personalizzato-parte-2-registra-blocco\/","title":{"rendered":"Crea un blocco Gutenberg personalizzato &#8211; Parte 2: Registra blocco"},"content":{"rendered":"\n<p>In questa parte scriveremo Javascript per registrare e configurare il nostro blocco personalizzato. Alla fine registreremo lo script con PHP e faremo il codice PHP necessario affinch\u00e9 WordPress lo riconosca come un nuovo blocco.<\/p>\n<p>Innanzitutto una breve nota su come accedere alle funzioni e ai componenti di WordPress Gutenberg.<\/p>\n<h2><code>wp<\/code>Il pacchetto globale e la destrutturazione<\/h2>\n<p>Quando ci troviamo in un file Javascript accodato nell&#8217;editor Gutenberg, abbiamo accesso a un oggetto\/pacchetto globale: <code>wp<\/code>. Questo \u00e8 un oggetto Javascript molto, molto grande e contiene un sacco di componenti e funzioni utili che useremo per creare blocchi. Quando scrivi Javascript per blocchi personalizzati ti riferirai a <code>wp<\/code>parecchio.<\/p>\n<p>Pertanto \u00e8 comune, sia nel moderno Javascript che in React, destrutturare ci\u00f2 che vogliamo utilizzare da esso. Fondamentalmente significa solo che definiamo variabili locali da parti di una struttura pi\u00f9 grande. Ad esempio, la prima funzione che useremo \u00e8 <code>registerBlockType()<\/code>che esiste all&#8217;interno di <code>wp.blocks<\/code>. Potremmo invocare la funzione in questo modo:<\/p>\n<pre><code>wp.blocks.registerBlockType();<\/code><\/pre>\n<p>Ma \u00e8 pi\u00f9 facile destrutturarlo in questo modo:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nregisterBlockType();<\/code><\/pre>\n<p>Ora puoi fare riferimento direttamente alla funzione senza anteporre ad essa la sua struttura. Diventa molto pi\u00f9 utile quando ci riferiamo a funzioni o componenti che ripeteremo spesso.<\/p>\n<p>Effettueremo la ristrutturazione in questa serie e man mano che avanziamo nel tutorial vedremo quanto diventa pi\u00f9 leggibile e pi\u00f9 breve il nostro codice.<\/p>\n<h2>Registrazione di un nuovo blocco<\/h2>\n<p>Nel pacchetto \u00e8 <code>registerBlockType()<\/code>disponibile la funzione per la registrazione di un nuovo blocco personalizzato. <code>wp.blocks<\/code>Accetta due parametri; prima una stringa con lo spazio dei nomi e il nome del blocco e, in secondo luogo, un oggetto con la configurazione completa del blocco.<\/p>\n<p>Gutenberg si aspetta che tutti i blocchi abbiano uno spazio dei nomi e un nome, definiti con una barra nel mezzo. Lo spazio dei nomi serve a garantire che il nome del blocco non sia in conflitto con altri blocchi che potrebbero utilizzare lo stesso nome. Tutti i blocchi in WordPress utilizzano lo spazio dei nomi <code>core<\/code>. Ad esempio, il blocco di paragrafo standard in WordPress ha il nome <code>core\/paragraph<\/code>. Se scegli un altro spazio dei nomi puoi anche creare un blocco denominato paragrafo senza causare problemi.<\/p>\n<p>Decidi uno spazio dei nomi della versione slug che sia unico per te. User\u00f2 lo spazio dei nomi <code>awp<\/code>(versione breve di A White Pixel) in questa serie.<\/p>\n<p>Apri il file sorgente che abbiamo creato nell&#8217;ultimo passaggio; <code>src\/block-awhitepixel-myfirstblock.js<\/code>, in un editore. Per prima cosa chiameremo <code>registerBlockType<\/code>da destructed <code>wp.blocks<\/code>, con il nome <code>awp\/firstblock<\/code>. Modifica il tuo nome e spazio dei nomi mentre procedi.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    \/\/ Your block configuration and code here\n});<\/code><\/pre>\n<p>Nel secondo parametro, l&#8217;oggetto di configurazione del blocco, \u00e8 necessario definire alcune propriet\u00e0 affinch\u00e9 venga registrato correttamente. Ricorda che la configurazione del blocco \u00e8 un oggetto, il che significa che devi scrivere tutto come coppie chiave + valore, separate da virgola. Ci sono alcune possibili propriet\u00e0 di configurazione, quindi esaminiamole e vedremo il codice finale alla fine.<\/p>\n<h3>Richiesto: titolo<\/h3>\n<p>La prima propriet\u00e0 richiesta \u00e8 <code>title<\/code>. Questo \u00e8 il nome che apparir\u00e0 quando selezioni tra i blocchi. Imposta questa propriet\u00e0 come qualsiasi nome desideri in una stringa.<\/p>\n<p>Aggiungeremo quanto segue come titolo:<\/p>\n<pre><code>title: 'My first block',<\/code><\/pre>\n<p>PS: Rivisiteremo il modo in cui scriviamo tutte le stringhe nel nostro blocco per assicurarci che possano essere tradotte nella parte 8. Ma per ora lo manterremo semplice e scriveremo semplicemente stringhe.<\/p>\n<h3>Obbligatorio: categoria<\/h3>\n<p>La propriet\u00e0 <code>category<\/code>definisce dove in quale categoria di blocco apparir\u00e0 il tuo blocco quando selezioni i blocchi da inserire nell&#8217;editor. I valori possibili sono <code>common<\/code>, <code>formatting<\/code>, <code>layout<\/code>, <code>widgets<\/code>, <code>embed<\/code>.<\/p>\n<p>Mettiamola in <code>common<\/code>, la prima categoria di blocco.<\/p>\n<pre><code>category: 'common',<\/code><\/pre>\n<h3>Opzionale: icona<\/h3>\n<p>Se hai usato Gutenberg, probabilmente avrai notato che tutti i blocchi hanno icone. Puoi aggiungere un&#8217;icona al tuo blocco con una stringa che fa riferimento a qualsiasi <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dashicon di WordPress<\/a> oppure puoi fornire un <code>svg<\/code>elemento personalizzato.<\/p>\n<p>Scelgo solo uno dei dashicon di WordPress, lo <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/#smiley\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">smiley<\/a>, ma puoi scegliere quello che vuoi. Nota che salti l&#8217;inclusione di &quot;dashicon-&quot; nel nome della classe dell&#8217;icona.<\/p>\n<pre><code>icon: 'smiley',<\/code><\/pre>\n<h3>Facoltativo: descrizione<\/h3>\n<p>Puoi fornire una descrizione che verr\u00e0 visualizzata nella barra laterale Impostazioni (sul lato destro) quando il blocco \u00e8 attivo.<\/p>\n<p>Aggiungo solo un breve testo come esempio:<\/p>\n<pre><code>description: 'Learning in progress',<\/code><\/pre>\n<h3>Facoltativo: parole chiave<\/h3>\n<p>Gutenberg supporta una funzionalit\u00e0 di ricerca quando si scelgono i tipi di blocco. \u00c8 possibile fornire una serie di possibili corrispondenze nella propriet\u00e0 <code>keywords<\/code>. Senza <code>keywords<\/code>di te troveresti il \u200b\u200btuo blocco solo cercando il suo nome.<\/p>\n<p>Aggiunger\u00f2 <code>example<\/code>e <code>test<\/code>, in modo da poter trovare facilmente il nostro blocco personalizzato quando iniziamo a digitare una di queste parole chiave.<\/p>\n<pre><code>keywords: ['example', 'test'],<\/code><\/pre>\n<h3>Facoltativo: attributi<\/h3>\n<p>La propriet\u00e0 <code>attributes<\/code>\u00e8 una propriet\u00e0 molto importante che rivisiteremo abbastanza spesso in questa serie di tutorial. Qui \u00e8 dove memorizzi i tuoi dati strutturati e le informazioni di input dell&#8217;utente per il tuo blocco. Puoi immaginarlo come variabile. Non lo aggiungeremo per ora, ma torneremo sicuramente su questo molto presto.<\/p>\n<h3>(Tipo di) richiesto: modifica e facoltativo: salva<\/h3>\n<p>All&#8217;interno <code>edit<\/code>e <code>save<\/code>le propriet\u00e0 \u00e8 in realt\u00e0 dove aggiungerai tutto il codice sia per l&#8217;output dell&#8217;editor che per il rendering del frontend. Entrambe queste propriet\u00e0 si aspettano una funzione che dovrebbe restituire un output.<\/p>\n<p>La propriet\u00e0 <code>edit<\/code>descrive la struttura del blocco all&#8217;interno dell&#8217;editor. La <code>save<\/code>propriet\u00e0 gestisce fondamentalmente due cose; l&#8217;output del tuo blocco nel frontend, ma anche la struttura di come il tuo blocco viene salvato nel database. Lavorerai principalmente in <code>edit<\/code>quanto \u00e8 qui che aggiungi input per inserire o scegliere cose e aggiornare i dati del blocco. La <code>save<\/code>funzione non dovrebbe aggiornare o modificare i dati in alcun modo, dovrebbe solo emettere.<\/p>\n<p>Gutenberg deve essere in grado di ricostruire il tuo blocco con tutte le sue impostazioni nell&#8217;editor da ci\u00f2 che viene restituito nella <code>save<\/code>funzione (e negli attributi). Se Gutenberg apre un post in cui l&#8217;output del blocco salvato in precedenza differisce (anche solo leggermente) da ci\u00f2 che \u00e8 definito in save, il tuo blocco non sar\u00e0 pi\u00f9 valido.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d21609214.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-151978-61e4d21609214.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 2: Registra blocco\" ><\/a><\/p>\n<p>Posso garantirti che lo incontrerai molto durante lo sviluppo di blocchi personalizzati. Quando ci\u00f2 accade \u00e8 necessario rimuovere il blocco (dai punti nella barra degli strumenti) e aggiungerlo nuovamente. Consiglio anche di eseguire un aggiornamento del browser (F5 o CTRL+R).<\/p>\n<p>WordPress ha una <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-edit-save\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pagina di documentazione dedicata<\/a> per le funzioni di modifica e salvataggio del blocco se vuoi saperne di pi\u00f9.<\/p>\n<p>Per quanto riguarda il nostro primo blocco, produciamo qualcosa di base. Restituiremo lo stesso per entrambi <code>edit<\/code>e <code>save<\/code>; un &#8220;:)&quot; avvolto in <code>&lt;div&gt;<\/code>. Dopotutto, l&#8217;icona del blocco \u00e8 una faccina.<\/p>\n<pre><code>edit:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n},\nsave:() =&gt; { \n    return &lt;div&gt;:)&lt;\/div&gt; \n}<\/code><\/pre>\n<h3>Altre propriet\u00e0<\/h3>\n<p>Ci sono pi\u00f9 propriet\u00e0 facoltative per <code>registerBlockType<\/code>; <code>parent<\/code>, <code>supports<\/code>, <code>transforms<\/code>, <code>example<\/code>, e <code>styles<\/code>. Salteremo questi per ora poich\u00e9 la maggior parte sono per la costruzione di blocchi pi\u00f9 avanzati o personalizzati. Se sei interessato a leggere di pi\u00f9 su questi, dai un&#8217;occhiata alla <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-registration\/#block-configuration\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentazione di WordPress<\/a>.<\/p>\n<h2>Codice blocco registro finale<\/h2>\n<p>Il nostro codice ora assomiglia a questo.<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    title: 'My first block',\n    category: 'common',\n    icon: 'smiley',\n    description: 'Learning in progress',\n    keywords: ['example', 'test'],\n    edit: () =&gt; { \n        return &lt;div&gt;:)&lt;\/div&gt; \n    },\n    save: () =&gt; { \n        return &lt;div&gt;:)&lt;\/div&gt; \n    }\n});<\/code><\/pre>\n<p>Con questo abbiamo abbastanza per registrare con successo il nostro blocco come blocco personalizzato. Vediamolo in pratica all&#8217;interno dell&#8217;editor di Gutenberg.<\/p>\n<p>Ti sei ricordato di compilare il tuo Javascript? Nel passaggio precedente abbiamo appreso che non possiamo caricare questo file Javascript in Gutenberg; abbiamo bisogno della versione compilata. Di solito ti svilupperesti con <code>npm run start<\/code>l&#8217;esecuzione in background, oppure puoi eseguire solo <code>npm run build<\/code>una volta ora. Questo dovrebbe compilare il nostro Javascript sorgente e posizionarlo dove l&#8217;hai definito per essere inserito e nominato nel tuo <code>webpack.config.js<\/code>.<\/p>\n<h2>La parte PHP della registrazione di un blocco<\/h2>\n<p>Per ogni blocco \u00e8 necessario registrare il file Javascript e questo \u00e8 proprio come registreresti qualsiasi altro script in WordPress, utilizzando <code>[wp_register_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_register_script\/)()<\/code>. Si noti che registriamo lo script, non lo accodiamo. Questo perch\u00e9 abbiamo anche bisogno di chiamare una funzione PHP per registrare ogni blocco personalizzato e quella funzione \u00e8 responsabile dell&#8217;accodamento dello script quando \u00e8 necessario.<\/p>\n<p>Preferisco mantenere il codice relativo a Gutenberg in un file separato nei miei temi. Ma puoi, e lo faremo in questo tutorial, scrivere semplicemente tutto il codice PHP direttamente all&#8217;interno del tema <code>functions.php<\/code>per motivi di semplicit\u00e0.<\/p>\n<p>Consiglio di usare l&#8217; <code>init<\/code>hook per la tua funzione e non <code>enqueue_block_assets<\/code>. Possiamo mettere insieme sia la registrazione dello script che la registrazione del blocco.<\/p>\n<pre><code>add_action('init', function() {\n    wp_register_script('awp-myfirstblock-js', get_template_directory_uri(). '\/assets\/js\/gutenberg\/block-awhitepixel-myfirstblock.js');\n\u00a0\n    register_block_type('awp\/firstblock', [\n        'editor_script' =&gt; 'awp-myfirstblock-js',\n    ]);\n});<\/code><\/pre>\n<p>La funzione PHP che useremo per registrare un nuovo blocco \u00e8 <code>[register_block_type](https:\/\/developer.wordpress.org\/reference\/functions\/register_block_type\/)()<\/code>. Allo stesso modo di Javascript, <code>registerBlockType()<\/code>accetta due parametri; lo spazio dei nomi e il nome del blocco e un array con argomenti. Assicurati di fornire lo stesso spazio dei nomi e lo stesso nome in PHP come in Javascript.<\/p>\n<p>Nel secondo argomento ci sono alcuni possibili argomenti (alcuni dei quali torneremo pi\u00f9 avanti in questa serie). Ma il pi\u00f9 importante \u00e8 <code>editor_script<\/code>dove si fornisce l&#8217;handle (primo parametro di <code>wp_register_script()<\/code>) dello script registrato.<\/p>\n<p>E questo \u00e8 tutto!<\/p>\n<h2>Il nostro blocco nell&#8217;editor di Gutenberg<\/h2>\n<p>Ora, quando aggiorni il tuo editor in alcuni post, dovresti trovare il nostro blocco, aprendo la categoria Comune o cercando una qualsiasi delle parole chiave o del nome che hai fornito.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d216d1cdb.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-151978-61e4d216d1cdb.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 2: Registra blocco\" ><\/a><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151978-61e4d217e1762.gif\" 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-151978-61e4d217e1762.gif\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 2: Registra blocco\" ><\/a><\/p>\n<p>Il nostro blocco rende un semplice &quot;:)&quot; sia nell&#8217;editor che nel frontend. A partire da ora non puoi modificare nulla nel blocco, ma questo \u00e8 ci\u00f2 che impareremo nei prossimi passaggi!<\/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>In questa lezione tutorial scriveremo Javascript per registrare il nostro blocco personalizzato. Alla fine registreremo lo script e faremo il codice PHP necessario.<\/p>\n","protected":false},"author":1,"featured_media":151979,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,896,939,939,1110,814,814,844,844,865,865],"tags":[1168],"class_list":["post-233867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","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\/233867","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=233867"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233867\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151979"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}